【发布时间】:2026-01-01 00:10:02
【问题描述】:
我正在调试的应用程序有问题。稳态内存使用量为几百兆字节。有时(几个小时后)它会进入内存使用量飙升至数 GB 的状态。一旦发生内存使用情况,我希望能够立即停止程序。
在控制通过我自己的代码传递的情况下,我可以使用如下代码捕获过多的内存使用:
bool usingTooMuchMemory()
{
PROCESS_MEMORY_COUNTERS pmc;
if (GetProcessMemoryInfo(GetCurrentProcess(), &pmc, sizeof pmc))
return pmc.WorkingSetSize > 0x80000000u; // 2GB working set
return false;
}
这对我没有帮助,因为我需要在正确的点测试工作集大小。我真的希望程序在第一个 malloc 或 new 上中断,这会使工作集或堆大小超过某个阈值。理想情况下,我希望 CRT 堆本身以最小的开销完成此操作,因为该库喜欢分配大量的小块。
可疑代码位于我的调用代码创建的线程中运行的 DLL 中。 DLL 静态链接到 CRT,并且没有特殊的堆管理。我有 DLL 的源代码。
有什么想法吗?我错过了什么明显的东西吗?
【问题讨论】:
标签: c++ windows memory-management heap-memory crt