虚拟内存澄清 - 分配大的连续内存

时间:2013-02-08 12:26:24

标签: linux windows memory memory-management

我有一个应用程序,我必须在Windows上分配(使用operator new)相当大的内存空间(数百MB)。该应用程序是32位(我们现在不使用64位,即使在64位系统上),我启用了/ LARGEADDRESSAWARE链接器选项,以便能够使用4 GB的用户空间内存。

问题如果我需要分配,比如450 MB的连续内存,那么进程的虚拟地址空间需要有一个连续的足够大的空间另外还有物理空间内存不必在系统上分段?我问这个是因为我可以这样做,以便我的应用程序保留足够大的连续空间,但不知道系统上的其他应用程序是否会以这种方式影响我。操作系统页面表是否需要将应用程序看到的连续虚拟地址转换为连续的物理地址?

2 个答案:

答案 0 :(得分:3)

如果内存只是在您的软件中使用,那么您的450MB分配在虚拟空间中只需要450MB的空洞。它可以满足来自内存系统每个角落的页面[只要系统中某处至少有450MB可用 - 包括交换空间]。

如果操作系统能够以2MB的连续块分配页面,那么您的系统将获得更好的性能[使用"大页面"每次2MB]。但如果需要,系统将回退到单独的4KB页面。

分页内存架构的几个好处之一是任何物理页面都可以放在任何虚拟地址。在某些系统中,例如在调试模式下的Xen虚拟化管理器,页面是故意按顺序分配的,以便更容易检测系统何时假设内存页是连续的。

答案 1 :(得分:1)

您无需担心物理内存的连续性。这是虚拟到物理地址转换帮助您的一件事。只要您可以保留一大块地址空间并将其与物理内存一起备份,无论它发生在哪里,事情都会起作用。