[英]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.