为什么所有 64 位 Linux 识别的 RAM 都比 32 位 Linux 少

为什么所有 64 位 Linux 识别的 RAM 都比 32 位 Linux 少

我目前使用 Linux Mint 32 位主要是因为它通常消耗更少的 RAM,并且比 64 位版本多识别 100MB 的 RAM。我的计算机中只安装了 4GB,而且我知道所有系统都不会使用已安​​装的全部内存,而是使用少一点的内存。例如,32 位系统中 4GB = 3.8GB。问题是我尝试过的所有 64 位 Linux 都只能识别 3.7GB。您可以说差异并不大,但当您没有大量 RAM 时就会出现这种情况。

它是 64 位架构的默认设置吗?我可以做些什么来改变这种情况吗?

答案1

32 位系统可以处理 2^32 位大小(4294967296 字节 = 4GB),而 64 位系统可以处理 2^64 位大小(18446744073709551616 字节 = 远远超过当前硬件可以处理的大小)。因此,64 位系统上的 RAM 限制与硬件限制有关,而不是与寻址限制有关。

您看到的 less 意味着一部分内存被保留给系统上的其他东西,最有可能是在 BIOS 级别完成的视频内存。

64 位应用程序在程序大小和内存使用方面总是稍大一些,因为通常存储在 4 字节上的变量(如长整数、浮点数和指针)都升级到 8 字节以执行相同的工作以支持 64 位寻址。请注意,否则不会对性能产生影响。

答案2

我认为差异不太可能真的是 100MB。更有可能的是,差异很小,但它发生在舍入边界上,因此它3.8GB变成3.7GB。例如,3.76和之间可能存在差异3.74

4GB此外,在只有RAM 的系统上使用 32 位 Linux 是完全合理的。

答案3

其中很大一部分可能与内核相关。我偶然发现以下线程讨论 2.6 系列中 Linux 内核中保留内存的显着增加:

https://forum.linode.com/viewtopic.php?t=7194

https://forum.linode.com/viewtopic.php?t=7229

长话短说:内核版本 2.6.38 中似乎引入了预留内存的显着增加,随后再次减少,仅适用于 32 位内核,在版本 2.6.39.1 中。

从内核版本 4.9.0-3-amd64 开始,我发现 4 GB Linode 实例上保留了 167500K 内存,因此这个问题似乎随着时间的推移而变得越来越严重。

相关内容