2

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

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

4

2 回答 2

3

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

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

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

于 2013-02-08T12:36:14.963 回答
1

您无需担心物理内存的连续性。这是虚拟到物理地址转换可以帮助您完成的一件事。只要您可以保留一块地址空间并用物理内存支持它,无论它碰巧在哪里,事情都会正常进行。

于 2013-02-08T12:30:35.553 回答