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

sno*_*ude 5 c++ windows mfc memory-management

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

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

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

Bra*_*don 5

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