【发布时间】:2012-08-08 23:04:01
【问题描述】:
我们的应用程序可能会分配大量小对象(取决于用户输入)。有时应用程序会耗尽内存并有效地崩溃。
但是,如果我们知道内存分配变得紧张,就会有一些优先级较低的对象可能被销毁,从而使我们能够优雅地降低用户结果。
在调用“new”实际失败之前,检测进程内存不足的最佳方法是什么?我们可以调用 API 函数,例如 GetProcessWorkingSetSize() 或 GetProcessMemoryInfo(),但是您如何知道何时达到给定机器的限制(例如,最大分配的 80%)?
【问题讨论】:
-
除非你的磁盘快满了,否则问题不在于机器上的可用内存量(因为你有虚拟的磁盘内存),而是由于这些对象和地址空间碎片可能的内存泄漏。
-
@AlexeyFrunze 在 32 位 Windows 上,内存分配似乎在 1.5GB 左右开始失败。这不是内存泄漏,我们可以计算所有使用的内存,但我同意你关于碎片的观点。
标签: c++ windows memory-management mfc