【问题标题】:32-bit PC, size of pointer32 位 PC,指针大小
【发布时间】:2012-10-26 14:51:58
【问题描述】:
对于 4G 内存,有 4 * 1024 * 1024 * 1024 * 8 = 2^(32+3) 位。我的问题是 32 位 PC 如何访问 4G 内存。我能想到的是“一个字节是存储单元,一个字节不能存储一个数据”。这是正确的吗?
另一个问题是:在这样的 PC 中,指针的大小总是 32 位吗?这对我来说似乎是合理的,因为我们有 2^32 个存储单元来存储数据。但在this answer and the next with their remarks 中,据说这是错误的。如果是错的,为什么?
【问题讨论】:
标签:
memory
pointers
byte
32bit-64bit
32-bit
【解决方案1】:
通过读取包含它的字节的地址、修改字节并在必要时回写来访问各个位。
在某些体系结构中,最小的可寻址单元是双字,在这种情况下,不能“按原样”访问单个字节。从理论上讲,可以设计一种架构,以 32 位的唯一地址寻址 16 GB 的内存。几年前也发生过类似的事情,当时硬盘的可寻址单元仅限于 2^28 个 512 字节扇区左右的单元。
说 PC 有 32 位指针并不是完全错误的。这只是一些旧信息,因为较新的模型内部是 64 位系统,并且可以根据操作系统访问高达 2^48 字节的内存。目前大多数现有的 PC 都是 32 位的,对此无能为力。
好吧,StuartLC 仍然在讨论寻呼。即使在当前的 32 位系统中,一个 可以 使用 48 位寻址使用旧时代段寄存器。 (不记得是否存在段寄存器低三位为零的限制......)但无论如何,这将允许 2^45 个字节的单个地址,其中只有一小部分可能同时在主存储器中.如果开发了支持该寻址模式的操作系统,则可能会为指针分配完整的 64 位。就像今天使用 64 位处理器一样。