39

只是在关于操作系统的普渡讲座中阅读了一些笔记,它说:

程序将内存视为从地址 0 到 2^32-1(0 到 4GB-1)的字节数组

为什么是 4 GB?

4

13 回答 13

65

因为 32 位能够表示最多 2 32 - 1 = 4294967295 = 4 GiB - 1 的数字,因此最多可以寻址 2 32 个单独的字节,即 4 GiB。

不过,有一些方法可以规避这一点。例如使用PAE,即使是 32 位操作系统也可以支持更多内存。不过,从历史上看,这最常用于服务器。此外,非服务器 Windows SKU 不支持它。不过,鉴于 64 位 CPU、操作系统和驱动程序支持已经司空见惯,现在这一切都没有实际意义。

于 2009-07-13T12:57:05.903 回答
34

因为内存的每个字节都必须有一个地址。在 32 位操作系统中,地址为 32 位长;因此,有 2^32 个可能的地址,这意味着有 2^32 个字节 = 4 GB。

于 2009-07-13T12:58:06.263 回答
26

每个人都说 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。

于 2009-07-13T13:13:53.363 回答
22

如果你有一个 4 位系统,这意味着每个字节的地址是 4 个二进制数字0000,你所有地址的概率范围11112^4 = 16(2,因为有 0 或 1),四位可以如果您有 16 个不同的地址,请创建16不同的零和一值。每个代表一个byte然后你可以有一个最大值16 bytes

4 位系统将如下所示:

在此处输入图像描述

对于 32 位系统,您的最大值为2^32 = 4294967292 bytes

于 2016-10-26T18:05:55.463 回答
13

4 GB = 2^32 字节。

于 2009-07-13T12:57:24.783 回答
9
2 ^ 32 = 4 * 1024 * 1024 * 1024

这就是 4 GB 的定义,以字节为单位。换句话说,作为内存指针的 32 位寄存器可以寻址 4 GB 的内存,仅此而已。

于 2009-07-13T12:57:30.320 回答
6

实际上,它并不像 2^32 = 4294967296 字节那么简单。您会看到在 x86 保护模式下启用了分页(即,当您使用任何现代操作系统时所得到的),您不会直接寻址内存位置,即使分页转换机制对客户端应用程序是透明的。

使用 4K 页时,逻辑 32 位内存地址:

  • 位 22-31 指的是页目录
  • 位 12-21 指的是页表
  • 位 11-0 指的是 4096 字节页面中的偏移量

如您所见,您有 2^10 (1024) 个页目录,在每个页目录中,您有 2^10 个页表,每个页长 2^12 (4096) 个字节,因此 2^32 = 4294967296 个字节。内存总线的宽度方便地与 CPU 的字长相同,但完全没有必要这样。事实上,更现代的 x86 CPU 支持 PAE,即使在 32 位模式下也可以寻址超过 4GB(或 GiB)。

于 2009-07-13T13:18:47.163 回答
3
  1. 32s 可以表示数字0..2^32=0..4,294,967,296
  2. 32s 最多可以寻址 2^32字节(假设字节大小块)
  3. 2^32字节是最大大小

2^32 B = 4,194,304 KiB = 4,194 MiB = 4 GiB

于 2019-05-19T04:59:49.783 回答
2

因为是可以存储在 Word 中的不同内存地址(以字节为单位)的数量。

但事实上,这并不总是正确的(在大多数情况下并非如此),操作系统可以处理比这更多的物理内存(使用 PAE)并且应用程序可以使用少于 4GB 的虚拟内存(因为该虚拟内存的一部分内存映射到操作系统,例如在 Linux 中为 1GB,在 Windows 中为 2GB)。

不适用的另一种情况是,如果内存由字而不是字节寻址,则可寻址的总内存将是 16GB,例如。

于 2009-07-13T12:59:51.180 回答
2

具有 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

于 2020-02-12T21:58:38.610 回答
1

主要是因为 32 位操作系统选择仅支持 2^32-1 个地址。

如果 CPU 在 FSB 上有超过 32 条地址线,那么 32bit OS 可以选择使用分页机制来访问超过 4GiB。(例如 PAE 支持的 Intel/AMD 芯片上的 Windows 2000 Advanced Server/Data Center 版本)

于 2009-07-13T13:33:43.090 回答
0

4 GB = 2^32 字节。但请记住它的最大 4gb 由 32 位操作系统分配。实际上,操作系统会看到更少,例如在 VRAM 分配之后。

于 2009-07-13T13:00:14.097 回答
0

正如其他用户之前所说,32 位 Windows 操作系统使用 32 位字来存储内存地址。

实际上,如今大多数 32 位芯片都使用 36 位寻址,使用英特尔的物理地址扩展 (PAE) 模型。一些操作系统直接支持这一点(例如 Linux)。

正如 Raymond Chen 所指出的,在 Windows 中,一个 32 位应用程序可以分配超过 4GB 的内存,而您不需要 64 位 Windows 来做到这一点。甚至是 PAE。

就此而言,64 位芯片不支持整个 64 位内存空间。我相信它们目前仅限于 42 位空间……PAE 使用的 36 位空间,加上前 8 位地址,

于 2009-07-13T15:25:20.297 回答