最近学习STM32,发现一个奇怪的问题,32位的系统,存储器地址空间应该是2的32次方bit,怎么计算,都是4Gbit

如题所述

你的算法没问题,你的理解有问题!32位的操作系统理论上最多支持4GBytes是没问题的。
1Bytes(字节)=8bits(字位)也是没问题的。你存在概念性错误,你的计算方案应该是以CUP的32位数来计算就只有2^32bits= 512MByte,然而2^32Byte=4GB。
首先你要区分32位操作系统和32位的处理器(cpu)的区别和联系。
(一)32位CPU每次可以处理32个字位,即32bits=4Bytes。每一个字节都有一个地址,其中包含了8个字位。32位CPU有32跟地址线,地址线决定了寻址范围的能力。每一根线都决定0和1两个地址,那么两根线就会决定00,01,10,11这四个地址,依次类推,32根线总共会决定出2^32次方个位置。这样计算是没有问题的。每一个位置都是1Byte,这是内存的基本单位,所以32位操作系统配32位CPU,理论上可以寻找4GB的地址。由于硬件等原因,系统显示会不到4G。
(二)32位操作系统与64位CPU的搭配。64位CPU有64根地址总线,理论支持2^32/1024^3 G的内存,这是一个很大的数字,但是实际上我们市场的电脑目前远远达不到这个理论内存的万分之一。目前64位也就是能支持120G的内存。但是如果64位CPU和32位操作系统搭配,也仅仅会支持4G的内存。因为在32位系统下,仅有32根地址线工作。
(三)寻址范围是由地址线个数确定的,而不是CPU位数确定的。CPU的地址总线根数决定了能找到多少个字节(Byte),数据总线的宽度决定了能够一次传送多少个二进制位(bit) 。希望你能明白其中的关系,不要把地址线直接和字位(bit)联系在一起。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2012-05-03
简单的说32位系统就是指地址总线是32位的的系统。所谓的32位与64位实际上是指计算机的寻址空间大小,也就是在一个时钟频率动作下寻找内存做出多少位的计算动作。2的5次方是32,而6次方则是64,对于采用二进制的计算机运算来说,寻址位数增加了,性能就能大幅度跃升。
4GB内存依然是安装32位处理器计算机的瓶颈,因为它寻址和编码范围偏小,只能适用于低端、小规模应用,一旦业务发展和数据量超过每日500万条时,系统就很容易出现故障甚至崩溃。64位平台高达180亿GB内存的寻址能力,使它在未来很长一段时间内都可以解决高端应用中存储器寻址的瓶颈。
一般来讲32位的CPU对于我们来讲是最理性的CPU,对于软件开发来讲足够了。但是2的32次方 = 4294967296bit = 4G左右。很显然32位CPU只有4G左右的内存寻址空间,对于一些服务器来讲4G的内存的远远不够的了。我们需要更加大的内存寻址空间的话就需要对CPU进升级。64位CPU就这样诞生了。追问

谢谢,不过你答非所问了,我问的是数学问题,2的32次方等于4Gbits,而不是4GBYTES,怎么算出4Gbytes的,请指点迷津!

追答

2的10次方B = 1 KB
2的10次方 KB = 1 MB
2的10 次方MB = 1 GB
2的32次方B = 4 X 2的30次方B = 4 GB
8bit(位)=1Byte(字节)

第2个回答  2012-05-03
在单片机中,存储的容量都以字节(byte)为单位的,就是说STM32是32位的,其寻址范围应该是4Gbyte而不是4Gbit。
再比如说Atmega128单片机,容量是128Kbyte。但是AVR指令是16位或者32位为单位的,所以这单片机的容量可以说成64Kword,因为1word=2byte。

对于只是存储功能的存储器,比如29C020这样的,才直接以bit来计算。比如29C020是8位256KB的容量,即8×256KByte=2Mbit。想SST39VF160是16Mbit的,其数据宽度可以是16位或者8位,在16位时就是1Mword,在8位时就是2Mbit。
相似回答