C++ 如何防止一个程序/进程的分页?

C++ 如何防止一个程序/进程的分页?,c++,linux,paging,swapfile,C++,Linux,Paging,Swapfile,我有一个需要大量内存的程序,就像所有物理ram的2/3。运行一段时间后,我的操作系统开始将程序交换到硬盘上。但是我需要程序始终快速响应,所以我需要防止该进程的分页 如何防止操作系统交换一个进程 谢谢你的帮助 使用mmap()而不是malloc,并使用“MAP_LOCKED”标志。(适用于linux>2.5.37)好吧,有一种方法可以锁定内存(告诉内核它可能不会被调出),但这意味着相对较小的内存量,需要修改程序 另一个选择可能是调整Linux的“交换性”,即它的页面交换倾向。有关有趣的讨论,请参阅

我有一个需要大量内存的程序,就像所有物理ram的2/3。运行一段时间后,我的操作系统开始将程序交换到硬盘上。但是我需要程序始终快速响应,所以我需要防止该进程的分页

如何防止操作系统交换一个进程

谢谢你的帮助

使用mmap()而不是malloc,并使用“MAP_LOCKED”标志。(适用于linux>2.5.37)

好吧,有一种方法可以锁定内存(告诉内核它可能不会被调出),但这意味着相对较小的内存量,需要修改程序

另一个选择可能是调整Linux的“交换性”,即它的页面交换倾向。有关有趣的讨论,请参阅。然而,每个过程都不可能做到这一点


我不知道您的问题有任何每进程解决方案。

在程序开始时,请拨打:

mlockall(MCL_CURRENT | MCL_FUTURE);
(如果您没有程序的源代码,则必须使用
ptrace
来取消进程)


请注意,这将增加进程失败时进行内存分配的机会。

请注意,这与使用mlock具有相同的效果(关于交换);因此,同样的警告也适用于此。这里有一个链接指向@kerneltrap关于此技术的讨论:我认为您不能“破坏”此过程。除非您可以从Tron访问该技术。:)“放荡”一个过程意味着让它喝醉,和它一起狂欢,等等……)相关的: