2

我正在寻找一种将内存预分配给进程(物理内存)的方法,以便在我调用 new/malloc 时绝对保证它对 C++ 堆可用。无论其他进程试图对系统内存做什么,我都需要这个内存可供我的进程使用。换句话说,我想为 C++ 堆保留物理内存,以便在我调用 malloc() 时它立即可用。以下是详细信息:

我正在开发一个实时系统。该系统由几个需要大量内存的进程组成。进程 A 是关键任务进程,它必须能够生存并且不受任何其他进程的不良行为的影响。它通常适合 0.5 GB 的内存,但有时需要多达 2.5 GB。其他进程尝试使用任意数量的内存。

我担心其他进程可能会分配大量内存,从而耗尽系统中的物理内存储备。然后,当进程 A 需要更多内存 FAST 时,它不可用,系统将不得不交换页面,这将需要很长时间。至关重要的是,进程 A 必须立即获得它需要的所有内存,而我对其他进程失败感到满意。

我在 Windows 7 64 位上运行。

编辑: SetProcessWorkingSetSize 会起作用吗?含义:调用它以获得足够大的内存量可以保护我的进程 A 免受系统中任何其他进程的影响。

4

2 回答 2

2

VirtualLock是您正在寻找的。它将强制操作系统将页面保留在内存中,只要它们处于工作集大小(这是 MK 在他的回答中链接到的函数)。但是,没有办法将此内存提供给malloc/ new- 您必须实现自己的内存分配器。

于 2012-09-28T19:25:58.160 回答
1

我认为这个问题很奇怪,因为 Windows 7 并不是实时应用程序的首选操作系统。也就是说,似乎有一个界面可以帮助您:

AllocateUserPhysicalPages

于 2012-09-28T14:25:27.317 回答