在 Windows 上开始分配失败之前检测内存不足

Detecting memory running low BEFORE allocations start failing on Windows(在 Windows 上开始分配失败之前检测内存不足)

本文介绍了在 Windows 上开始分配失败之前检测内存不足的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

We have an application that could potentially allocate a large number of small objects (depending on user input). Sometimes the application runs out of memory and effectively crashes.

However, if we knew that memory allocations were becoming tight there are some lower-priority objects which could be destroyed and thereby allow us to gracefully degrade the user results.

What's the best way to detect that memory for a process is running low before calls to 'new' actually fail? We could call API functions like GetProcessWorkingSetSize() or GetProcessMemoryInfo() but how do you know when the limits on a given machine are being reached (e.g. with 80% of maximum allocations)?

解决方案

  • At start up, allocate a memory reserve.
  • Then use set_new_handler() to install a hook that will detect allocations failures.
  • When one happens:
    • Free the reserve (so you have enough free memory to work with).
    • Run your code that finds and frees low priority objects.
    • When that has done its job, try to reallocate the reserve again (for next time).
    • Finally return to let the original allocation attempt retry.

这篇关于在 Windows 上开始分配失败之前检测内存不足的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!

本文标题为:在 Windows 上开始分配失败之前检测内存不足

基础教程推荐