我们有一个可能会分配大量小对象的应用程序(取决于用户输入)。有时,应用程序会耗尽内存并导致崩溃。
但是,如果我们知道内存分配变得紧张,那么可以销毁一些优先级较低的对象,从而使我们能够优雅地降低用户结果。
在调用“new”实际上失败之前,检测进程内存的最佳方法是什么?我们可以调用API函数,例如GetProcessWorkingSetSize()
或GetProcessMemoryInfo()
,但是您如何知道何时达到给定计算机的限制(例如,最大分配的80%)?
答案 0 :(得分:5)
答案 1 :(得分:2)
如果是32位进程,那么您需要确保不要使用超过1.6GB,这是2.0GB的80%,这是您的进程允许的最大值。调用GlobalMemoryStatusEx
将填充结构MEMORYSTATUSEX.ullAvailVirtual
,当这只有400MB可用(或更少)时,您就可以达到阈值。
答案 2 :(得分:0)
检查此答案Win32/MFC: How to find free memory (RAM) available?。
您需要定期查找可用的可用内存并在某个限制内停止分配。
如上面提到的答案中所述,您可以使用GlobalMemoryStatusEx
和/或VirtualQueryEx
。