有一个C ++代码可以在循环的迭代中进行一些计算。当我运行我的代码几个小时时,不会观察到内存使用量的增加。但是当我让它运行过夜时,MS Performance Monitor工具(perfmon.exe)会观察到内存使用量增加50 MB,如下所示。绘图仅适用于我的流程而不是整个系统。
Visual Leak Detector无法检测已实现循环内的任何内存泄漏。内存使用量增加的原因是否可能是内存泄漏之外的其他原因?
答案 0 :(得分:1)
视觉泄漏探测器可能被内存使用模式所欺骗,这些模式看起来是合法的,而事实上并非如此。例如,如果你继续分配一些东西而不仅忘记释放它们,而且还在列表中保留它们的指针,这看起来就像任何愚蠢的工具所能说的那样正常的内存使用。
此外,对于桌面应用程序而言,50MB的内存并不是很大,而且无论如何您的观察结果太有限,无法得出任何结论。可能是你的C ++运行时的内存管理器认为这些50MB的花生值得牺牲效率,因此当有更多新的OS内存可用时,可能选择不打算合并相邻的空闲块以满足分配请求。为了更好地理解正在发生的事情,您需要向我们展示一个更完整的应用程序内存分配图表。它是一个连续的直坡吗?这是一个在某个时刻变成扁平线的斜坡吗?它在某处突然有台阶吗?即使在物理内存完全耗尽并开始分页后,它是否会继续上升?