32 位 CPU 可以寻址 4 GB 或 4 GB 的内存地址空间吗?

Old*_*kid 1 memory

我想知道 4 GB 是否意味着就 32 位操作系统寻址“只有 4GB 的地址空间”而言是“千兆位”或“千兆字节”?

其他帖子提到 2^32 位等于 4294967296 字节。但是,如果他们谈论 32 位,那么结果如何以字节为单位给出?

或者我错过了什么?

use*_*ser 10

在大多数(如果不是全部)当前广泛使用的架构中,内存寻址以字节为单位完成。

32 位地址宽度允许您指定 2 32 个(约 43 亿个)地址。

这意味着使用 32 位寻址并按字节寻址 RAM 的 CPU 可以本地寻址 2 32 字节,这等于 4 GiB(吉比字节)或 4,294,967,296 字节。

在许多当前架构上,还有其他问题需要考虑,例如内存请求地址对齐,这限制了哪些地址可用于实际访问。但这并不会改变 CPU 可以寻址多少 RAM,它只会改变它可以寻址的方式,除非您工作得非常靠近 CPU,否则这通常是从程序员那里抽象出来的,当然也从用户那里抽象出来。

还值得记住的是,CPU 的“位数”不一定指 CPU 的地址宽度,而通常指的是 CPU 的本机字长。以原始 IBM PC 中使用的 Intel 8088 及其兄弟 8086 为例;它有 16 位字长,但有 20 位地址宽度,通常被称为 16 位 CPU,尽管 8088 只有 8 位数据总线宽度(8086 有 16 位数据总线宽度)公共汽车)。Intel 80386SX 具有 32 位本机字长,但有 24 位可用地址宽度;80386DX 具有完整的 32 位地址宽度。摩托罗拉 68000 与 8086/8088 大致相同,具有 24 位地址宽度,但采用混合 16/32 位设计。等等。本机字长可能与地址宽度相同,但并非必须如此。

有一些方法(例如物理地址扩展,PAE)可以绕过通常由 32 位地址宽度强加的 4 GiB 限制,就像具有 16 位地址的 CPU 使用各种技术(包括分段和组切换)一样寻址超过 64 KiB(2 16字节)的 RAM。此外,如果寻址是在不同的单元中完成的(例如,16 位字而不是 8 位字节),那么可寻址的实际内存量将相应改变;例如,通过寻址 16 位字而不是 8 位字节,32 位地址宽度将允许寻址 8 GiB,因为每个地址实际上寻址两个字节。

  • 这很直接地说明了这个问题。这就像一栋公寓楼的公寓数量多于邮箱。地址空间是邮箱集,字节是公寓。公寓的大小与邮箱的数量关系不大。 (3认同)