c++ - 内存泄漏还是内存碎片?

标签 c++ memory-leaks c++builder memory-fragmentation

我在 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/

相关文章:

c++ - 创建重复对象的 vector ?

c++ - 在fopen()之后和相应的fclose()之前使用system()(文件描述符泄漏)

performance - grails 2.0.3 中 byte[] 的内存泄漏

c++ - 为什么 C++ 构建器中的 DBL_MAX 不一致?

c++ - Borland 断言在 local_unwind() 中失败

C++11 静态局部变量和线程

c++ - 为分数类型重载运算符 < , ==

c++ - munmap_chunk() : invalid pointer: 0x00007fffbef49d90 in a recursive function

android - 尽管在 onDestroyView 中将父 View 设置为 null,但 fragment View 内存泄漏

c++builder - c++ Builder xe5 检测到错误(LME288)