1

我正在使用需要使用大块内存的 Barnes-Hut 算法用 C 语言编写 N 体模拟。我追求速度和效率。有什么方法可以保证这些内存块将保留在 RAM 中而不被分页到硬盘驱动器?

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

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

4

2 回答 2

2

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

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

¹ “Linux 不是 UNIX” 的反对意见被注意到并被偏见地忽略了。

于 2012-10-01T00:21:08.983 回答
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

于 2012-10-01T00:25:18.987 回答