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

标签 linux windows memory memory-management

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

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

最佳答案

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

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

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

关于linux - 虚拟内存澄清——大连续内存的分配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14772556/

相关文章:

c - BENCH_INNER : lmbench3. 0 src代码宏查询

windows - 如何回显以数字结尾的字符串?

c - 故障 DLL(ISAPI 筛选器)

.net - 确定.NET中对象图的内存使用率

c++ - 是否有任何 C++ API 可用于了解操作系统描述?

linux - Bash脚本为所有文件添加一个随机数

linux - C++/Linux : Using c++11 atomic to avoid partial read on dual-mapped mmap region

node.js - npm 在 'npm install' 之后不起作用

c++ - 为现代 opengl 创建立体上下文

java - java中如何知道一个对象有多少个引用