LInux保留内存以供以后分配c ++

时间:2016-12-01 10:01:42

标签: c++ linux memory-management

是否有可能为c ++程序中的后续分配保留内存?

背景: 我正在使用Preempt RT补丁在Debian上工作。我的程序使用大约100MB的内存。 ALl页面阻止与mlockall()交换。主要有2个运行线程,一个实时运行并且不分配内存。另一个线程以稍低的优先级运行并分配/释放内存。 在一些罕见的情况下,后台进程会分配所有可用内存,系统正在开始交换。现在我的快速'线程想要一小块公羊。现在内核从交换中给了我新的小块。所以我的程序被一个巨大的延迟打断,比如3秒。

问题: 有没有办法保留记忆,比方说200MB。如果我的程序将分配它绝对可以不交换?

1 个答案:

答案 0 :(得分:1)

即使你分配了所需的所有内存,在你的程序开始时,你害怕的情况是另一个进程将使用内存。除非您是该计算机上的唯一进程,否则将始终存在另一个正在运行的进程。因此,您需要的解决方案是“保留”RAM空间,除了您的进程可以访问之外,没有人可以访问。这意味着内核永远不会将此空间交换为HD(因此内核不会执行任何物理访问)。

幸运的是,除非你改变内核并重新编译它,否则是不可能的。想想你有多个过程为自己“保留”记忆的可能性。如果你有4Gb内存,那么你就陷入困境:(