我正在使用需要使用大内存块的 Barnes-Hut 算法在 C 中编写 N 体模拟。我追求速度和效率。有什么方法可以保证这些内存块将保留在 RAM 中而不被分页到硬盘驱动器?
编辑:我想分配多达 2GB 的内存,但可以想象我最终可能会运行一些具有更多内存的模拟。
编辑:解决方案应该支持 Windows7(可能是 Windows8 出来的时候?)和 Ubuntu
最佳答案
有一些操作系统原语可以做你想做的事:mlock
在 Unix 上(Ubuntu 只是其中一个例子¹),以及 VirtualLock
在 Windows 上。 (忽略评论中关于 VirtualLock 确切语义的争论;它们与您的用例无关。)
Unix 原语在调用进程中需要 root
权限(一些系统允许在没有权限的情况下锁定一小部分内存,但您想要的远不止于此)。 Windows 原语似乎不需要特殊权限。
¹“Linux 不是 UNIX”的反对意见被记录下来,并带有偏见地被忽略了。
关于c - 在 C 中分配大内存块时避免分页?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12666179/