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

标签 c memory paging

我正在使用需要使用大内存块的 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/

相关文章:

asp.net - 构建excel文件使内存异常

android - 新的 Jetpack 分页库使应用程序崩溃 - 新

c - 如何在独立的 shell 程序中实现 previous-command-scroll?

c - "clip"重复某个范围的值的最有效方法?

c - 结构体和变量的大小

hadoop - 驱动程序内存、执行程序内存、驱动程序内存开销和执行程序内存开销对作业运行成功的 Apache Spark 影响

c - 如何将C语言转换为MIPS汇编代码?

scala - Scala使用惰性集合处理大型Scala数据的功能方法

linux - 保护 : how is memory protection implemented

iOS 水平菜单 w ScrollView