32位PC,指针大小

时间:2012-11-06 15:54:00

标签: memory pointers byte 32bit-64bit 32-bit

对于4G ram,有4 * 1024 * 1024 * 1024 * 8 = 2 ^(32 + 3)位。我的问题是32位PC如何能够访问4G内存。我能想到的是“一个字节是存储单元,一个不能存储数据”。这是对的吗?

另一个问题是:在这样的PC中,指针总是大小为32位吗?这对我来说似乎是合理的,因为我们有2 ^ 32个存储单元来存储数据。但是在this answer and the next with their remarks中,这被认为是错误的。如果是错的,为什么?

2 个答案:

答案 0 :(得分:2)

通过读取包含它的字节的地址来访问各个位,修改字节并在必要时写回。

在某些体系结构中,最小的可寻址单元是双字,在这种情况下,不能“按原样”访问单个字节。从理论上讲,人们可以设计一种架构,可以使用32位唯一地址来处理16 GB内存。类似的事情发生在几年前,当时硬盘驱动器的可寻址单元仅限于2 ^ 28个单位的512字节扇区左右。

说PC有32位指针并不是完全错误的。这只是一些旧信息,因为较新的模型是内部64位系统,并且可以根据操作系统访问高达2 ^ 48字节的内存。目前大多数现有的PC都是32位的,没有什么可以做的。

好吧,StuartLC仍在谈论分页。即使在当前的32位系统中,一个也可以使用老年段寄存器来使用48位寻址。 (不记得段寄存器是否存在低三位为零的限制...)但无论如何这将允许2 ^ 45字节的单个地址,其中只有一小部分可以同时存在于主存储器中。如果开发了支持该寻址模式的OS,那么可能会为指针分配完整的64位。就像现在的64位处理器一样。

答案 1 :(得分:0)

  

我的问题是32位PC如何能够访问4G内存

您可能会混淆地址总线(可寻址存储器)和处理器寄存器的大小。这superuser post details the differences

分页是一种常用于允许内存超出操作系统功能大小的内存的技术,例如:见PAE

  

指针的大小总是为32位

不,不一定 - 例如在16位DOS和Windows上,指针也可以相对于一个段。

  

一个人不能存储数据吗?

是的,你可以,例如在C中,bit packing in structs可以完成,但代价是性能和可移植性。

今天性能更重要,出于性能原因,编译器通常会尝试将数据调整为machine word大小。