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

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

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

Solutions Collecting From Web of "虚拟内存的澄清 – 分配大量的连续内存"

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

如果操作系统能够分配每块2MB的连续块(​​每次使用2MB的“大页面”),系统性能会有所提高。 但是如果需要的话,系统将回退到单独的4KB页面。

分页内存体系结构的好处之一就是可以将任何物理页面放置在任何虚拟地址上。 在一些系统中,例如调试模式下的Xen虚拟化管理器,页面被意外分配,以便更容易检测系统何时对内存页面进行连续的假设。

你不需要关心物理内存的连续性。 这是虚拟到物理地址转换可以帮助您的一件事情。 只要你可以预留一大块地址空间,并用物理内存来备份它,无论它发生什么,事情都会起作用。