什么是内存
先说“什么是内存”。
这些个内容,你若有兴趣,就当“科普内容”来听好了!
直接的感性认识,就是你电脑插在内存插槽上的内存插条,拥有台式机的朋友可以方便的看到。
「图略」
理性认识么,我们就不讨论这么深了。
然后我们要知道的就是,程序,需要内存才能够跑。比如你玩《魔兽》,商家会告诉你这需要大内存,好显卡。最好你得是512M的内存,128M的显卡。这样玩起来就比较流畅了,高级的显示效果也可以打开了。
什么呢?因为,你看啊,游戏中所有的树木、地面、人物这些,他都需要时间的数据来描述:最简单的比如位置,好比地图上的经纬度一样,你只是得用两个数字来描述。还有一个海拔,就是垂直地面的相对高度;比如,你站在一个高10米的岩石上,那么你当前的“海拔”就是10米;
数据肯定需要内存空间来存储——天上不可能凭空掉馅饼。衡量内存大小的单位是byte,我们先假设一个简单的一个数字需要一个byte的内存空间。那么,你看,最简单的游戏中的人物就需要至少3个数字(「长」、「宽」、「高」——空间的三维矢量),还不包括人物身上的东西:手啥形状,服侍是啥颜色。你可以想象,这是多少“数字”啊!一个数字对一个点内存——蚁多咬死象,需要的内存肯定是很多。
再加上如此丰富的游戏画面,可以同时在线的游戏玩家的恐怖数量,在个人的电脑上再重建这些画面,需要多少内存啊!
我们待会儿再说魔兽中的“坐标”!
「图略」
我们再说说CPU。
现在大家基本都是用的32位的CPU。那么32位是什么意思呢?指的是这种CPU有32根地址线——或者你直观一点,可以认为,这个CPU方形“插头”,有32根线头。
一般的用电器有2根的,用电两大的,容易有安全隐患的,就是3个头的:
「图略」
而32位CPU有32根地址线:
32根地址线是啥概念?
大家学过排列组合的都知道,若每根线都只能有两种状态(想象点灯的开和关)。那么:
我们先假设这个CPU只有1根地址线(靠,这怎么可能?),那么这个低能的CPU只能表示开关两种状态。
假设有2根地址线,相当于在第一种之后1根地址线的CPU上再加了根线,它就可以表示多少呢,2×2,对4种情况。
我们得出这样的结论,每增加一根地址线,可以表示的状态就翻了一倍!道理很简单——若某款CPU有i根地址线,假设它可以表示m种状态。那么i+1根线的,就相当于在i个开关外,再多加了一个开关;原来的m种状态的每一种情况,我只要改变一下这个多加进去的开关状态,我就多得到了一种状态!
原来共m种,那么我现在就有了2×m种了!
就是说,我们常用的32位CPU,可以表示2的32次方(就是32个2相乘)种状态,也就是4个G!
那么,具体4个G是多大呢?这个G是多大的单位呢?
按<winKey> +<R>,然后输入:“calc”,就会弹出来一个计算器窗口了(<winKey>就是介于<Ctrl><Alt>两个按钮之间的那个window标示的键——台式机键盘左右各有一个,笔记本只有左边有一个)。然后点【查看】,选择【科学型】,输入一个“2”,再点【x^y】(表示次方运算——用过科学型计算器的都知道吧!)然后在输入32,然后回车或者点那个【=】键。
这就是2的32次方了!够大吧!
然后计算器左上方,还有一组单选框:
「图略」
默认是十进制。然后你可以点到二进制看看,是不是显示从
4294967296
变成了
100000000000000000000000000000000
恐怖吧,32个零!
觉不觉得“32”这个数字很熟悉啊!
对,就是32位CPU的地址线数目!
如果大家能由此联想到1个地址线是1个0;20位地址线的CPU就是20个0(著名的8086CPU的针脚数!),…那么恭喜各位,大家就明白了二进制的真谛了还有CPU的一个巨大作用了!
而二进制就是为计算机而发明的计数方法(人可受不了——若一个十进制的“4294967296”要念出10个数字的话,那么写成二进制就要念出33个数字——32个0再加一个1,舌头会受不了!)
(然后要提一下的就是,计算机中用的数制单位:K、M、G分别代表2的10次方,2的20次方,2的30次方。可以推算出来,2的32次方就代表“2的2次方”再乘以“2的30次方”,也就是4个G!)
电视上不是推了一个节目叫“假如你有了一百万”,我们这里就叫:“假如你有了个4G!”(注意,这里不是RMB,是内存!)
32位的CPU能有这么多种状态,就可以表示这么多个数,具体的每一个数值,就代表这4个G内存中具体的内存单位。
4个1024M的内存条不是所有人都能用得起的,所以真正能使用4个G物理内存的人是不多的!但是,由于有著名的虚拟内存技术,硬盘足够大,那么每个编程人员都能享受4个G的“内存”。具体虚拟内存技术我们就不在这里讨论了,我也不太懂——反正就是“拆东墙补西墙”的方法,内存不足,就用硬盘凑!(有兴趣的呢,可以先打开c盘,点【工具】选【文件夹选项】,点开【查看】分页,点掉【隐藏受保护的操作系统文件(推荐)】,然后点确定,就会在c盘的根目录下,出现一个叫pagefile.sys的文件——该文件大小可大可小,也可能因为你点了【不使用使用虚拟内存】而根本没有这个文件。)
具体的细节我们就不管了,反正我们知道一点,由于操作系统的支持,我们搞编程的可以方便的使用4个G的内存!
这4个G内存,你可以把他想象成这样一个样子:一个忒长的尺子,上满均匀的刻了
100000000000000000000000000000000[2]
或者说
4294967296[10]
个刻度。
(数字后面加一个方括号,和数字2,表示强调这是二进制;类似,数字为10,强调这是十进制数。)
那么每个单位刻度,是啥意思呢?
我们马上讲数据储存!
上面说了32位的CPU能表示很大的一个范围,整整4个G啊!注意,计算机是西方人发明的,他们只使用26个字母,分大小写,也才52,加上少量标点也就70个,为了照料拉丁、法德的特殊字符,也不过翻倍而已——因为很多字母都相同。所以,一个32位的二进制数(4个G!)用来表示一个字符,太浪费了,所以
把32位的分成4分来用,每8位一个单位!8位呢,可以表示256[10]种状态。起码 English 的表达是足够了,拉丁、法德也够了,甚至还有点剩余——用作一些特殊的制表符、控制字符。老外把这个单位叫byte,中文叫“比特”。还有,“位”这个中文,对应老外的“bit”,就是说8 bit = 1 byte。
(我这里有点不管历史地乱讲,因为32位芯片不是电脑一诞生,就发明了的,先是机械式,然后是电磁式,接着是电子管,到现在的晶体管,位数从原来的4位到8位,到16位,到……,再到最新的64位。为了讲述方便,我把“结果”当“因为”讲了,请大家谅解!因为若要详细的话,这将是一个“long long story”)
但是,仅仅用一个byte(8位)用来描述中文是不够的。中文的常用字虽然只有6000、7000,但难道其他不常用的字就不用了吗?处理编程问题的一个麻烦事情,就是,你得把所有可能发生的异常情况都考虑进去,不然,你的程序,就是不完善的!这里,也是这样,就得把所有的字(当然不是所有,汉字也在不断的发展中,太偏、太旧的字是不会收录进去的!)都弄进去,大约2万多点吧!为此,中文,就是用16位的二进制数表示,就是65536[10],6万多哦!这样像亚洲的日文、韩文都能被包括进去!
让我们联系到c的编程中:
printf ("size of char = %d\n", sizeof(char));
printf ("size of short = %d\n", sizeof(short));
printf ("size of int = %d\n", sizeof(int));
分别输出1和2,还有4。
就是说,计算机为了储存一个char类型和 short类型,分别需要消耗1个byte和2个byte的空间。所以,实际编程中,常常用char类型存放英文,short来存放中文。(我自己在编程中,为了寻址的方便,如果,需要处理中英文混合的情况,就都用short来存。)而放int,需要4个字节的空间,大多数情况,4个byte的int,已经能满足大多情况的“整数”数据存储了!
stand alone complex
独步天下,吾心自洁。
无欲无求,宛若林中之象……
i'm walking in the dark.
事物只有两种状态:发展 和 死亡。
先说“什么是内存”。
这些个内容,你若有兴趣,就当“科普内容”来听好了!
直接的感性认识,就是你电脑插在内存插槽上的内存插条,拥有台式机的朋友可以方便的看到。
「图略」
理性认识么,我们就不讨论这么深了。
然后我们要知道的就是,程序,需要内存才能够跑。比如你玩《魔兽》,商家会告诉你这需要大内存,好显卡。最好你得是512M的内存,128M的显卡。这样玩起来就比较流畅了,高级的显示效果也可以打开了。
什么呢?因为,你看啊,游戏中所有的树木、地面、人物这些,他都需要时间的数据来描述:最简单的比如位置,好比地图上的经纬度一样,你只是得用两个数字来描述。还有一个海拔,就是垂直地面的相对高度;比如,你站在一个高10米的岩石上,那么你当前的“海拔”就是10米;
数据肯定需要内存空间来存储——天上不可能凭空掉馅饼。衡量内存大小的单位是byte,我们先假设一个简单的一个数字需要一个byte的内存空间。那么,你看,最简单的游戏中的人物就需要至少3个数字(「长」、「宽」、「高」——空间的三维矢量),还不包括人物身上的东西:手啥形状,服侍是啥颜色。你可以想象,这是多少“数字”啊!一个数字对一个点内存——蚁多咬死象,需要的内存肯定是很多。
再加上如此丰富的游戏画面,可以同时在线的游戏玩家的恐怖数量,在个人的电脑上再重建这些画面,需要多少内存啊!
我们待会儿再说魔兽中的“坐标”!
「图略」
我们再说说CPU。
现在大家基本都是用的32位的CPU。那么32位是什么意思呢?指的是这种CPU有32根地址线——或者你直观一点,可以认为,这个CPU方形“插头”,有32根线头。
一般的用电器有2根的,用电两大的,容易有安全隐患的,就是3个头的:
「图略」
而32位CPU有32根地址线:
32根地址线是啥概念?
大家学过排列组合的都知道,若每根线都只能有两种状态(想象点灯的开和关)。那么:
我们先假设这个CPU只有1根地址线(靠,这怎么可能?),那么这个低能的CPU只能表示开关两种状态。
假设有2根地址线,相当于在第一种之后1根地址线的CPU上再加了根线,它就可以表示多少呢,2×2,对4种情况。
我们得出这样的结论,每增加一根地址线,可以表示的状态就翻了一倍!道理很简单——若某款CPU有i根地址线,假设它可以表示m种状态。那么i+1根线的,就相当于在i个开关外,再多加了一个开关;原来的m种状态的每一种情况,我只要改变一下这个多加进去的开关状态,我就多得到了一种状态!
原来共m种,那么我现在就有了2×m种了!
就是说,我们常用的32位CPU,可以表示2的32次方(就是32个2相乘)种状态,也就是4个G!
那么,具体4个G是多大呢?这个G是多大的单位呢?
按<winKey> +<R>,然后输入:“calc”,就会弹出来一个计算器窗口了(<winKey>就是介于<Ctrl><Alt>两个按钮之间的那个window标示的键——台式机键盘左右各有一个,笔记本只有左边有一个)。然后点【查看】,选择【科学型】,输入一个“2”,再点【x^y】(表示次方运算——用过科学型计算器的都知道吧!)然后在输入32,然后回车或者点那个【=】键。
这就是2的32次方了!够大吧!
然后计算器左上方,还有一组单选框:
「图略」
默认是十进制。然后你可以点到二进制看看,是不是显示从
4294967296
变成了
100000000000000000000000000000000
恐怖吧,32个零!
觉不觉得“32”这个数字很熟悉啊!
对,就是32位CPU的地址线数目!
如果大家能由此联想到1个地址线是1个0;20位地址线的CPU就是20个0(著名的8086CPU的针脚数!),…那么恭喜各位,大家就明白了二进制的真谛了还有CPU的一个巨大作用了!
而二进制就是为计算机而发明的计数方法(人可受不了——若一个十进制的“4294967296”要念出10个数字的话,那么写成二进制就要念出33个数字——32个0再加一个1,舌头会受不了!)
(然后要提一下的就是,计算机中用的数制单位:K、M、G分别代表2的10次方,2的20次方,2的30次方。可以推算出来,2的32次方就代表“2的2次方”再乘以“2的30次方”,也就是4个G!)
电视上不是推了一个节目叫“假如你有了一百万”,我们这里就叫:“假如你有了个4G!”(注意,这里不是RMB,是内存!)
32位的CPU能有这么多种状态,就可以表示这么多个数,具体的每一个数值,就代表这4个G内存中具体的内存单位。
4个1024M的内存条不是所有人都能用得起的,所以真正能使用4个G物理内存的人是不多的!但是,由于有著名的虚拟内存技术,硬盘足够大,那么每个编程人员都能享受4个G的“内存”。具体虚拟内存技术我们就不在这里讨论了,我也不太懂——反正就是“拆东墙补西墙”的方法,内存不足,就用硬盘凑!(有兴趣的呢,可以先打开c盘,点【工具】选【文件夹选项】,点开【查看】分页,点掉【隐藏受保护的操作系统文件(推荐)】,然后点确定,就会在c盘的根目录下,出现一个叫pagefile.sys的文件——该文件大小可大可小,也可能因为你点了【不使用使用虚拟内存】而根本没有这个文件。)
具体的细节我们就不管了,反正我们知道一点,由于操作系统的支持,我们搞编程的可以方便的使用4个G的内存!
这4个G内存,你可以把他想象成这样一个样子:一个忒长的尺子,上满均匀的刻了
100000000000000000000000000000000[2]
或者说
4294967296[10]
个刻度。
(数字后面加一个方括号,和数字2,表示强调这是二进制;类似,数字为10,强调这是十进制数。)
那么每个单位刻度,是啥意思呢?
我们马上讲数据储存!
上面说了32位的CPU能表示很大的一个范围,整整4个G啊!注意,计算机是西方人发明的,他们只使用26个字母,分大小写,也才52,加上少量标点也就70个,为了照料拉丁、法德的特殊字符,也不过翻倍而已——因为很多字母都相同。所以,一个32位的二进制数(4个G!)用来表示一个字符,太浪费了,所以
把32位的分成4分来用,每8位一个单位!8位呢,可以表示256[10]种状态。起码 English 的表达是足够了,拉丁、法德也够了,甚至还有点剩余——用作一些特殊的制表符、控制字符。老外把这个单位叫byte,中文叫“比特”。还有,“位”这个中文,对应老外的“bit”,就是说8 bit = 1 byte。
(我这里有点不管历史地乱讲,因为32位芯片不是电脑一诞生,就发明了的,先是机械式,然后是电磁式,接着是电子管,到现在的晶体管,位数从原来的4位到8位,到16位,到……,再到最新的64位。为了讲述方便,我把“结果”当“因为”讲了,请大家谅解!因为若要详细的话,这将是一个“long long story”)
但是,仅仅用一个byte(8位)用来描述中文是不够的。中文的常用字虽然只有6000、7000,但难道其他不常用的字就不用了吗?处理编程问题的一个麻烦事情,就是,你得把所有可能发生的异常情况都考虑进去,不然,你的程序,就是不完善的!这里,也是这样,就得把所有的字(当然不是所有,汉字也在不断的发展中,太偏、太旧的字是不会收录进去的!)都弄进去,大约2万多点吧!为此,中文,就是用16位的二进制数表示,就是65536[10],6万多哦!这样像亚洲的日文、韩文都能被包括进去!
让我们联系到c的编程中:
printf ("size of char = %d\n", sizeof(char));
printf ("size of short = %d\n", sizeof(short));
printf ("size of int = %d\n", sizeof(int));
分别输出1和2,还有4。
就是说,计算机为了储存一个char类型和 short类型,分别需要消耗1个byte和2个byte的空间。所以,实际编程中,常常用char类型存放英文,short来存放中文。(我自己在编程中,为了寻址的方便,如果,需要处理中英文混合的情况,就都用short来存。)而放int,需要4个字节的空间,大多数情况,4个byte的int,已经能满足大多情况的“整数”数据存储了!
最后修改于2007-8-18 18:59:00



独步天下,吾心自洁。
无欲无求,宛若林中之象……
i'm walking in the dark.
事物只有两种状态:发展 和 死亡。
评论