我在 Borland Builder C++ 6 中运行以下代码,可以在内存(专用工作集)、Windows 任务管理器中看到程序使用的内存增加,我认为这是内存泄漏。
for (int i = 0; i < 100000; i++)
{
try {
int n = 0;
int r = 1 / n; //division by zero
}
catch (EDivByZero& e) {}
}
我尝试用 FASTMM4
替换 Builder C++ 的默认内存管理器,但看到了相同的行为。是因为内存泄漏还是内存碎片因为我在两者之间感到困惑。我认为在这两种情况下,程序都必须将虚拟内存分页到磁盘,从而增加使用的内存。
查看虚拟内存是区分泄漏和碎片的好主意,但我该怎么做呢? windows有没有工具可以测试?
最佳答案
“增加程序在内存(专用工作集)中使用的内存,Windows 任务管理器,我认为这是内存泄漏。” - 这是不正确的
当您释放程序中的内存时,它将被释放回您的程序,而不是 O/S。只有当您的程序退出时,内存才会释放给操作系统。
注意 - 这只是典型的行为,C++ 对此没有明确说明,YMMV。
关于c++ - 内存泄漏还是内存碎片?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18912823/