有没有办法告诉计算机将一个项目保存在内存中,或者至少尽最大努力防止它被分页到磁盘?我希望能够这样做以确保我的内存部分永远不必去磁盘来获取其信息,因为我知道它几乎需要立即获取,但可能不会经常获取
这是与Linux。尽管如果您也有其他平台的答案,我会对其他平台感兴趣
它是特定于操作系统的,但是......
在 POSIX 世界中,您使用mlock 和 mlockall来指示数据必须保存在 RAM 中而不是分页。为此,您可能需要严格的用户权限。
不过要注意 Linux 的默认过度使用策略。如果您想确保您确实拥有分配的内存,请确保在锁定它之前触摸它并假设它全部在 RAM 中。
根据您真正关心这一点的原因,您甚至可以完全删除交换。根据您的系统交换到的位置(DMA、PIO 等),这可能是您唯一的性能保证,无论您在应用程序中做什么。
您可以在操作系统中关闭分页。在程序级分页大多是不透明的。您可以使用 64 位编译程序以获得额外的可寻址内存。
正确的调用是madvise(p, sizeof(*p), MADV_WILLNEED)
. 这告诉 Linux 你很快就会需要 *p
。如果它意外地被分页,这甚至会导致 Linux 取消分页。
与 不同mlock
的是,此调用无需严格的用户权限即可完成。