如何保证当进程调用malloc()时,它会立即分配物理内存? < >我正在寻找一种方法来预先分配内存到进程(物理内存),这样当我调用Neal/Maloc时,它绝对可以被C++堆所用。我需要这个内存对我的进程可用,而不管其他进程如何处理系统内存。换言之,我想将物理内存保留到C++堆中,以便在调用MalCube()时立即可用。 详情如下:

如何保证当进程调用malloc()时,它会立即分配物理内存? < >我正在寻找一种方法来预先分配内存到进程(物理内存),这样当我调用Neal/Maloc时,它绝对可以被C++堆所用。我需要这个内存对我的进程可用,而不管其他进程如何处理系统内存。换言之,我想将物理内存保留到C++堆中,以便在调用MalCube()时立即可用。 详情如下:,c++,windows,memory-management,malloc,C++,Windows,Memory Management,Malloc,我正在开发一个实时系统。该系统由几个内存不足的进程组成。进程A是任务关键型进程,它必须生存并对任何其他进程的不良行为免疫。它通常可以容纳0.5 GB的内存,但有时需要多达2.5 GB的内存。其他进程尝试使用任意数量的内存 我担心的是,其他进程可能会分配大量内存,耗尽系统中的物理内存储备。然后,当进程需要更快的内存时,它不可用,系统将不得不交换页面,这将花费很长时间。 进程A必须毫不延迟地获得它所需的所有内存,而我对其他进程的失败没有意见 我运行的是64位Windows7 编辑: SetProce

我正在开发一个实时系统。该系统由几个内存不足的进程组成。进程A是任务关键型进程,它必须生存并对任何其他进程的不良行为免疫。它通常可以容纳0.5 GB的内存,但有时需要多达2.5 GB的内存。其他进程尝试使用任意数量的内存

我担心的是,其他进程可能会分配大量内存,耗尽系统中的物理内存储备。然后,当进程需要更快的内存时,它不可用,系统将不得不交换页面,这将花费很长时间。 进程A必须毫不延迟地获得它所需的所有内存,而我对其他进程的失败没有意见

我运行的是64位Windows7

编辑:
SetProcessWorkingSetSize工作吗?含义:调用此操作需要足够大的内存量,这样可以保护我的进程a不受系统中任何其他进程的影响。

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


就是你要找的。这将迫使操作系统将页面保留在内存中,只要它们处于工作集大小(这是MK在其答案中链接的函数)。但是,无法将此内存提供给
malloc
/
new
-您必须实现自己的内存分配器。

在Windows中实时?祝你好运。你希望如何在非实时操作系统上编写RT软件?你是在用户模式下编程吗?2.5GB的关键数据。。。嗯,也许是重新设计的时候了玻璃窗-这是在石头现在设置。RT不是这个系统中唯一的约束。我必须充分利用它,我不完全理解这一点,但是我不确定分配的物理页面是否会被CRT堆使用。我知道要利用它们,必须调用VirtualAlloc来保留内存,然后MapUserPhysicalPages可以将其映射到物理内存。但是,我无法访问CRT内部进行的分配,因此我无法将它们映射到我分配的物理页面上。我可以吗?