在C中分配大块内存时避免分页?

时间:2012-10-01 00:01:51

标签: c memory paging

我正在使用Barnes-Hut算法在C中编写N体仿真,这需要使用大块内存。我想要速度和效率。有没有办法保证这些内存块会留在内存中而不会被分页到硬盘上?

编辑:我想分配多达2GB,但可以想象我最终可能会运行更多内存的模拟。

编辑:解决方案应该支持Windows7(可能是Windows8出来的时候?)和Ubuntu

2 个答案:

答案 0 :(得分:2)

有些操作系统原语可以满足您的需求:Unix上的mlock(其中Ubuntu只是一个例子¹),而Windows上是VirtualLock。 (忽略关于VirtualLock的确切语义的评论中的狡猾;它们与您的用例无关。)

Unix原语在调用进程中需要root权限(某些系统允许在没有权限的情况下锁定数量的内存,但是你想要的远不止这些)。 Windows原语似乎不需要特殊权限。

¹“Linux不是UNIX”反对意见,并在偏见中被忽略。

答案 1 :(得分:1)

对于Linux:mlock(2)将完成这项工作。

https://www.kernel.org/doc/man-pages/online/pages/man2/mlock.2.html

但请注意,用户可嵌入内存的数量通常仅限于标准系统ulimit -l

Windows版本是VirtualLock。我不知道是否存在限制以及如何查询。

http://msdn.microsoft.com/en-us/library/windows/desktop/aa366895%28v=vs.85%29.aspx