只是在关于操作系统的普渡讲座中阅读了一些笔记,它说:
程序将内存视为从地址 0 到 2^32-1(0 到 4GB-1)的字节数组
为什么是 4 GB?
因为 32 位能够表示最多 2 32 - 1 = 4294967295 = 4 GiB - 1 的数字,因此最多可以寻址 2 32 个单独的字节,即 4 GiB。
不过,有一些方法可以规避这一点。例如使用PAE,即使是 32 位操作系统也可以支持更多内存。不过,从历史上看,这最常用于服务器。此外,非服务器 Windows SKU 不支持它。不过,鉴于 64 位 CPU、操作系统和驱动程序支持已经司空见惯,现在这一切都没有实际意义。
因为内存的每个字节都必须有一个地址。在 32 位操作系统中,地址为 32 位长;因此,有 2^32 个可能的地址,这意味着有 2^32 个字节 = 4 GB。
每个人都说 2^32 = 4GiB,这是正确的。以防万一,这是我们到达那里的方式:
32 位机器使用 32 位来寻址内存。每个位的值是 0 或 1。如果有 1 位,则有两个可能的地址:0 或 1。两位系统(双关语)有四个可能的地址:00 =0, 01=1, 10= 2, 11=3。2^2=4。三位有 8 个可能的地址:000=0、001=1、010=2、011=3、100=4、101=5、110=6 和 111=7。
每个位都会使潜在的地址空间加倍,这就是为什么 2^n 告诉您对于给定数量的位使用多少地址。2^1 = 2、2^2 = 2*2 = 4、2^3 = 2*2*2 = 8 等。
当你达到 32 位时,你就达到了 4GiB。
4 GB = 2^32 字节。
2 ^ 32 = 4 * 1024 * 1024 * 1024
这就是 4 GB 的定义,以字节为单位。换句话说,作为内存指针的 32 位寄存器可以寻址 4 GB 的内存,仅此而已。
实际上,它并不像 2^32 = 4294967296 字节那么简单。您会看到在 x86 保护模式下启用了分页(即,当您使用任何现代操作系统时所得到的),您不会直接寻址内存位置,即使分页转换机制对客户端应用程序是透明的。
使用 4K 页时,逻辑 32 位内存地址:
如您所见,您有 2^10 (1024) 个页目录,在每个页目录中,您有 2^10 个页表,每个页长 2^12 (4096) 个字节,因此 2^32 = 4294967296 个字节。内存总线的宽度方便地与 CPU 的字长相同,但完全没有必要这样。事实上,更现代的 x86 CPU 支持 PAE,即使在 32 位模式下也可以寻址超过 4GB(或 GiB)。
0..2^32
=0..4,294,967,296
2^32 B = 4,194,304 KiB = 4,194 MiB = 4 GiB
因为是可以存储在 Word 中的不同内存地址(以字节为单位)的数量。
但事实上,这并不总是正确的(在大多数情况下并非如此),操作系统可以处理比这更多的物理内存(使用 PAE)并且应用程序可以使用少于 4GB 的虚拟内存(因为该虚拟内存的一部分内存映射到操作系统,例如在 Linux 中为 1GB,在 Windows 中为 2GB)。
不适用的另一种情况是,如果内存由字而不是字节寻址,则可寻址的总内存将是 16GB,例如。
具有 32 位寄存器的 CPU 将需要操作系统以 32 位块计算所有内容。这是操作系统必须遵守的硬件要求。同样,具有 64 位寄存器的 CPU 将需要一个操作系统,该操作系统以 64 位块的形式从 RAM 读取和写入数据。(每次从内存中读取数据时,都需要将其读入其中一个寄存器 - 无论是 32 位、64 位还是 16 位等)
一个 32 位的寄存器可以存储 2^32 个不同的 RAM 地址。每个 RAM 地址对应于现代 RAM 中的一个字节(8 位)。(4 GB 参数仅适用于每个字节都有地址的 RAM。)
=> 2^32 = 4,294,967,296 个地址,→ 对应于 4,294,967,296 个字节。
现在,1 KB = 2^10 字节或 1024 字节(在二进制系统中)
因此,4,294,967,296 字节 / 1024 = 4,194,304 KB
4,194,304 KB / 1024 = 4,096 MB
4,096 MB / 1024 = 4 GB
主要是因为 32 位操作系统选择仅支持 2^32-1 个地址。
如果 CPU 在 FSB 上有超过 32 条地址线,那么 32bit OS 可以选择使用分页机制来访问超过 4GiB。(例如 PAE 支持的 Intel/AMD 芯片上的 Windows 2000 Advanced Server/Data Center 版本)
4 GB = 2^32 字节。但请记住它的最大 4gb 由 32 位操作系统分配。实际上,操作系统会看到更少,例如在 VRAM 分配之后。
正如其他用户之前所说,32 位 Windows 操作系统使用 32 位字来存储内存地址。
实际上,如今大多数 32 位芯片都使用 36 位寻址,使用英特尔的物理地址扩展 (PAE) 模型。一些操作系统直接支持这一点(例如 Linux)。
正如 Raymond Chen 所指出的,在 Windows 中,一个 32 位应用程序可以分配超过 4GB 的内存,而您不需要 64 位 Windows 来做到这一点。甚至是 PAE。
就此而言,64 位芯片不支持整个 64 位内存空间。我相信它们目前仅限于 42 位空间……PAE 使用的 36 位空间,加上前 8 位地址,