如果一个进程使用6GB的内存并且指针是32位,那么如果指针在linux中保存虚拟地址,那么如何在4GB以上的2GB上进行寻址?
是否只运行64位解决方案?抱歉天真的问题
答案 0 :(得分:2)
完成Basile's answer,大多数架构已将物理地址空间扩展到36位(参见Intel的PSE,PowerPC的扩展实页号,......)。因此,虽然任何进程只能通过32位指针寻址4GB的内存,但是两个不同的进程实际上能够处理64GB物理内存地址空间的不同4GB内存。这是一种32位'操作系统可以处理高达64GB内存的方式(例如,Windows 2003 Server为32GB)。
答案 1 :(得分:1)
正如我在评论中所说,运行64位是实用的解决方案。你真的不想在临时文件上再次映射mmap大段。
您可以在运行时更改address space,但您不希望这样做(除非分配内存,例如通过malloc
,这可能会增加mmap
的可用空间)。
改变地址空间以获得巨大记忆的错觉是一场噩梦。避免这种情况(您将花费数月时间进行调试以重现错误)。在1960年代IBM 1130做了这样疯狂的伎俩。
今天,计算机比开发人员的时间便宜。所以只需购买一台带有8Gb(千兆字节)RAM的64位处理器。
具有PAE功能的多个32位处理器能够使用超过4Gb的RAM,但每个进程最多只能看到4Gb(实际上是3Gb)的虚拟内存。
它与virtual memory有关,而与英特尔特定的细分无关。当前的Linux(和其他)操作系统甚至在英特尔处理器上使用flat memory model。