Detecting memory running low BEFORE allocations start failing on 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 上开始分配失败之前检测内存不足
- 与 int by int 相比,为什么执行 float by float 矩阵乘法更快? 2021-01-01
- STL 中有 dereference_iterator 吗? 2022-01-01
- Stroustrup 的 Simple_window.h 2022-01-01
- 如何对自定义类的向量使用std::find()? 2022-11-07
- 一起使用 MPI 和 OpenCV 时出现分段错误 2022-01-01
- 使用/clr 时出现 LNK2022 错误 2022-01-01
- C++ 协变模板 2021-01-01
- 从python回调到c++的选项 2022-11-16
- 静态初始化顺序失败 2022-01-01
- 近似搜索的工作原理 2021-01-01