CPU寻址能力讨论。。。
gpu吧
全部回复
仅看楼主
level 12
pengzhenxx 楼主
看见很多64位系统和64位处理器的帖子,觉得有必要和大家讨论一下。。。
当然这里主要讨论x86架构。。。
首先是内存地址的概念(个人理解,仅供参考):内存中其实是以一个字节(Byte)为一个单元的,每个字节都有一个编号表示自己的"位置",CPU要读写数据就必须先知道这个数据的地址,,,可以这么认为,宾馆的每个房间都有门牌号,要找到某个房间就必须要知道门牌号,CPU要读写数据,执行指令都需要知道指令或数据的“门牌号”才行
2014年01月05日 09点01分 1
level 12
pengzhenxx 楼主
理解这个概念就可以解释为什么32位系统只能支持最大4GB内存了,CPU要访问内存,外部应该通过3个总线,即地址总线,数据总线和控制总线,当然这里主要讨论地址总线,通常来讲32位处理器,其地址线有32条,也是32位,CPU只能识别二进制数,也就是说一根线只能表示2种状态(地址编号),要么是1,要么是0,那么32条线就能够表示2的32次方个编号,
所以32位系统只能表示2的32次方个编号,每个编号对应1Byte,那么32位只能寻址2的32次方Byte的内存,,2的10次方=1024,那么2^32=1024*1024*1024*2*2Byte=4GB内存,,,
由于32位windows系统会保留部分内存空间给系统使用,所以一般32位windows系统会显示4GB以下内存可用,但在CPU角度看,4GB是没有问题的
2014年01月05日 09点01分 2
level 12
pengzhenxx 楼主
至于64位CPU,其实目前看来所谓64位处理器,并不代表其CPU的地址总线也是64bit,x86中64bit CPU通常只有36/40bit的地址总线,所以其寻址能力远远达不到64位应有的水平,包括苹果A7,也应该没有64条地址总线,,,服务器的CPU也许有更大的地址总线以支持更大内存
2014年01月05日 09点01分 3
level 12
pengzhenxx 楼主
下面是个人猜测了。。。
64bit系统为啥更加吃内存??
个人认为,从编程角度看,由于windows大量的系统程序是C/C++语言写的,那么就有指针问题,指针是存放内存地址的变量,64bit系统自然也需要64bit的指针来存放,64bit=8Byte,,而32bit系统只需要32bit指针,32bit=4Byte,,,64位系统的指针要比32位系统大一倍,编程中又经常使用指针,大量的指针使用势必会占用更多内存,,当然64bit系统出了庞大臃肿的指针会占用大量内存应该还有其他的原因,但64位系统并不会保留内存,所以可以看到完整的内存可用
内存大小会受到主板限制???
个人认为,CPU要通过地址总线寻址,那么CPU虽然有40条地址线(40bit地址线,能寻址1024GB内存),但俺只给你连接34条,那么只能有2^34=1024*1024*1024*2^4=16GB内存了。。。服务器主板也许会有更多的地址线,但布线压力和设计也就高了
2014年01月05日 10点01分 4
level 12
pengzhenxx 楼主
@crayon嘻哈小新 俺的理解有没有错误???
2014年01月05日 10点01分 5
level 14
不是可以通过pae扩展么
2014年01月06日 03点01分 6
level 10
苦逼大一计算机新生路过,书上告诫我们C++不要用指针。。。
2014年01月06日 03点01分 7
c++没学过,不过指针对于c语言事灵魂,有它才让c有强大的功能,和为所欲为的能力,还有数据库等等都应该有强大作用,,,如果是底层,比如汇编基本大多数是内存地址问题
2014年01月06日 14点01分
回复 pengzhenxx :嗯。。。刚刚C语言考试。。。。
2014年01月06日 15点01分
回复 pengzhenxx :[惆怅~]你工作了没? 上次吧里的cuda和opcl没去试试么?
2014年01月07日 08点01分
回复 LYP951018 :[惆怅~]‘武汉哪里?
2014年01月07日 08点01分
1