将内存项保留在RAM中,禁止将其分页到磁盘

时间:2013-08-01 14:19:55

标签: c++ c memory paging ram

有没有告诉计算机将一个项目保留在ram中,或者至少要尽量避免将其分页到磁盘?我希望能够做到这一点,以确保我的内存部分永远不会去磁盘获取其信息,因为我知道它是需要几乎立即获取但可能无法经常获取的东西

这是用linux。虽然我对其他平台感兴趣,但如果你有答案那么

3 个答案:

答案 0 :(得分:6)

这是O / S特定的,但是......

在POSIX世界中,您使用mlock and mlockall表示数据必须保存在RAM中而不是分页。您可能需要严格的用户权限。

请注意Linux默认overcommit政策。如果你想确定你实际拥有了内存的内存,请确保在锁定它之前触摸它并假设它全部在RAM中。

根据您真正关心的原因,您甚至可以完全删除掉掉。根据您的系统交换到的位置(DMA,PIO等),这可能是您性能的唯一保证,无论您在应用程序中执行什么操作。

答案 1 :(得分:0)

您可以在操作系统中关闭分页。在程序级,分页主要是不透明的。您可以使用64位编译程序,以获得额外的可寻址内存。

答案 2 :(得分:-1)

正确的电话是madvise(p, sizeof(*p), MADV_WILLNEED)。这告诉Linux你将很快需要 *p。如果它意外地被分页,那么这甚至会导致Linux取消它。

mlock不同,此调用可以在没有严格用户权限的情况下完成。