gpt4 book ai didi

c++ - 在 Windows 上分配开始失败之前检测到内存不足

转载 作者:可可西里 更新时间:2023-11-01 13:29:50 31 4
gpt4 key购买 nike

我们有一个应用程序可能会分配大量小对象(取决于用户输入)。有时,应用程序会耗尽内存并崩溃。

但是,如果我们知道内存分配变得紧张,就会有一些较低优先级的对象可以被销毁,从而使我们能够优雅地降低用户结果。

在调用“new”实际失败之前检测进程内存不足的最佳方法是什么?我们可以调用 GetProcessWorkingSetSize()GetProcessMemoryInfo() 之类的 API 函数,但您如何知道何时达到给定机器的限制(例如,达到最大分配的 80% )?

最佳答案

  • 在启动时,分配内存储备。
  • 然后使用 set_new_handler() 安装一个钩子(Hook)来检测分配失败。
  • 当一个发生时:
    • 释放保留空间(这样您就有足够的空闲内存来使用)。
    • 运行查找并释放低优先级对象的代码。
    • 完成其工作后,尝试再次重新分配储备(以备下次使用)。
    • 最后返回让原来的分配尝试重试。

关于c++ - 在 Windows 上分配开始失败之前检测到内存不足,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11922085/

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