【问题标题】: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 位处理器一样。

    【讨论】:

      【解决方案2】:

      我的问题是 32 位电脑如何访问 4G 内存

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

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

      指针的大小是否总是 32 位

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

      不能存储数据吗?

      是的,你可以,例如在 C 语言中,bit packing in structs 可以实现,尽管以性能和可移植性为代价。

      如今性能更为重要,出于性能原因,编译器通常会尝试将数据与其machine word 大小对齐。

      【讨论】:

        猜你喜欢
        • 2019-03-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-11-09
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多