gpt4 book ai didi

c++ - 如何保证当一个进程调用malloc()时,它会立即分配物理内存?

转载 作者:可可西里 更新时间:2023-11-01 10:07:38 26 4
gpt4 key购买 nike

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

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

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

我在 Windows 7 64 位系统上运行。

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

最佳答案

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

关于c++ - 如何保证当一个进程调用malloc()时,它会立即分配物理内存?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12641820/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com