0

如果一个进程使用 6GB 内存并且指针是 32 位的,那么由于指针在 linux 中保存虚拟地址,如何对 4GB 以上的 2GB 进行寻址?

仅在 64 位解决方案上运行?对不起,天真的问题

4

2 回答 2

2

完成Basile 的回答后,大多数架构已将物理地址空间扩展到 36 位(参见 Intel 的 PSE、PowerPC 的扩展实数页码……)。因此,尽管任何进程只能通过 32 位指针寻址 4GB 的内存,但两个不同的进程实际上可以寻址 64GB 物理内存地址空间中的不同 4GB。这是 32 位操作系统寻址高达 64GB 内存(例如,Windows 2003 Server 为 32GB)的一种方式。

于 2012-07-30T13:48:36.840 回答
1

正如我在评论中所说,在 64 位上运行是实用的解决方案。您真的不想 munmap 然后再mmap临时文件上的大段。

您可以在运行时更改地址空间,但您不想这样做(分配内存时除外,例如 thru malloc,这可能会增加可用空间 thru mmap)。

更改地址空间以获得巨大内存的错觉是一场噩梦。避免这种情况(您将花费数月的时间进行调试以重现错误)。在 1960 年代,IBM 1130做了如此疯狂的把戏。

今天,计算机比开发人员的时间便宜。因此,只需购买具有 8Gb(千兆字节)RAM 的 64 位处理器。

几个具有PAE功能的32 位处理器能够使用超过 4Gb 的 RAM,但每个进程最多只能看到 4Gb(实际上是 3Gb)的虚拟内存。

它与虚拟内存有关,与英特尔特定的分段无关。当前的 Linux(和其他)操作系统即使在 Intel 处理器上也使用平面内存模型。

于 2012-07-30T12:22:53.153 回答