[英]Detecting memory running low BEFORE allocations start failing on Windows
我们有一个可能会分配大量小对象的应用程序(取决于用户输入)。 有时,应用程序会耗尽内存并导致崩溃。
但是,如果我们知道内存分配变得紧张,那么可以销毁一些优先级较低的对象,从而使我们能够优雅地降低用户结果。
在调用“new”实际上失败之前,检测进程内存的最佳方法是什么? 我们可以调用像GetProcessWorkingSetSize()
或GetProcessMemoryInfo()
这样的API函数,但是你怎么知道什么时候达到给定机器的限制(例如80%的最大分配)?
如果它是一个32位进程,那么您需要确保不要使用超过1.6GB,这是2.0GB的80%,这是您的进程允许的最大值。 调用GlobalMemoryStatusEx
将填充结构MEMORYSTATUSEX.ullAvailVirtual
,当这个只有400MB可用(或更少)时,你就达到了你的门槛。
检查此答案Win32 / MFC:如何找到可用的空闲内存(RAM)? 。
您需要定期查找可用的可用内存并在某个限制内停止分配。 如上面提到的答案中所述,您可以使用GlobalMemoryStatusEx
和/或VirtualQueryEx
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.