我正在使用Barnes-Hut算法在C中编写N体仿真,这需要使用大块内存。我想要速度和效率。有没有办法保证这些内存块会留在内存中而不会被分页到硬盘上?
编辑:我想分配多达2GB,但可以想象我最终可能会运行更多内存的模拟。
编辑:解决方案应该支持Windows7(可能是Windows8出来的时候?)和Ubuntu
答案 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