【发布时间】:2012-04-02 16:14:25
【问题描述】:
我故意制造了一个内存泄漏来向即将学习指针的人展示一个点。
int main()
{
while (1)
{
int *a = new int [2];
//delete [] a;
}
}
如果在没有注释代码的情况下运行,内存将保持低位并且不会像预期的那样上升。但是,如果按原样运行,那么在具有 2GB RAM 的机器上,内存使用量会迅速上升到大约 1.5GB,或者系统未使用的任何东西。但是,一旦达到这一点,CPU 使用率(以前是最大值)就会大大下降,内存使用率也会下降到大约 100MB。
究竟是什么导致了这种干预动作(如果有比“Windows”更具体的东西,那就太好了),为什么程序不占用它循环的 CPU,但也不终止?它似乎卡在循环结束和 main 结束之间。
Windows XP、GCC、MinGW。
【问题讨论】:
-
您如何测量“内存使用率”和“CPU 使用率”?您的测量设备是否可能正在测量工作集大小或物理内存大小而不是虚拟内存大小?
-
我使用的是默认任务管理器。
-
“干预动作”可能是由于某些处理程序捕获的崩溃而您看不到它,并且在崩溃后执行清理。
-
“我正在使用默认任务管理器。”这报告了很多信息。你用的是什么数据?
-
我只是使用带有内存使用和 CPU 使用列的进程选项卡。但是,添加虚拟内存实际上表明虚拟内存继续上升。不过,我仍然不确定物理内存会发生什么。此外,添加一个包含所有异常的 try-catch 不会产生任何结果。
标签: c++ windows memory-leaks