我们有一个应用程序可能会分配大量小对象(取决于用户输入)。有时应用程序会耗尽内存并导致崩溃。
然而,如果我们知道内存分配变得紧张,那么一些优先级较低的对象可能会被销毁,从而允许我们优雅地降低用户结果。
在调用“new”实际失败之前检测进程内存不足的最佳方法是什么?我们可以调用 API 函数,例如GetProcessWorkingSetSize()
or GetProcessMemoryInfo()
但是您如何知道何时达到给定机器的限制(例如,达到最大分配的 80%)?
- 启动时,分配内存储备。
- 然后使用 set_new_handler() 安装一个用于检测分配失败的钩子。
- When one happens:
- 释放保留(这样您就有足够的可用内存来使用)。
- 运行查找并释放低优先级对象的代码。
- 当完成其工作后,尝试再次重新分配储备(下次)。
- 最后返回让原来的分配尝试重试。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)