在用完RAM之前分配虚拟内存

时间:2010-10-22 16:04:00

标签: c++ c memory virtual allocation

是否有可能在C / C ++程序中为特定数组分配虚拟内存(交换空间),以便程序继续使用RAM来处理其余变量,并可能在某些类型的问题上获得一些好处??

2 个答案:

答案 0 :(得分:9)

对于第一部分:在几乎所有现代操作系统中,都有一种将文件映射到内存位置的方法。您可以这样做并将该文件用作您描述的“交换空间”。 POSIX标准定义mmap(可通过Linux和Mac OS使用),Windows具有MapViewOfFile

对于第二部分:它在很大程度上取决于您遇到的问题类型。有可能它只会使你的数组​​访问速度变慢(如“慢得多”),并没有任何帮助,除非它是一个巨大的数组,你正在寻找一种方法来通过将内容外包给硬盘驱动器来节省内存。通常情况下,您的操作系统会自行分配交换空间并按其认为合适的方式处理它,因此明确使用文件作为附加内存对我来说似乎不是一个好的解决方案。

答案 1 :(得分:1)

您应该允许操作系统处理它。如果您决定在磁盘本身上“分配”空间,那么访问您的阵列将非常非常慢,并且考虑到阵列可能是非常大的操作,它将需要永远。所有当前操作系统都应该支持自动将程序内存放在交换或页面文件中。如果你对性能损失不感兴趣,你可以在“内存”中创建自己的数组,但我建议不要这样,好像你的程序在运行时发生了某些事情,这可能不会被清理,并可能导致进一步的问题。 / p>