内存没有完全被破坏 - 内存泄漏

时间:2015-07-12 16:58:18

标签: c++ arrays linux memory-management memory-leaks

我在我的代码中使用了2D数组,并且在使用fun之前和使用它之后,我希望应用程序使用相同数量的已用内存。但不幸的是,这些价值观并不相同。当我在fun的开头检查已用内存时(来自代码 - 使用/proc/self/statm,其中操作系统是linux),这是一些金额,当我在return ...之前检查用过的内存时{ {1}}功能与以前的数量不同。你能看到一些内存泄漏吗?我认为所有的记忆都在不必要的时候毁灭,但也许有些问题:fun。你觉得怎么样?

编辑: 首先检查 - 在创建Independentsets之后,在返回之前进行第二次检查,因此Independentsets不是问题。除此之外,在Main之后删除Independentsets。对于acrualvertices和newVertices来说存在问题

编辑2: 也许这样的记忆检查:

actualVertices = newVertices;

有问题吗?您是否知道以编程方式进行内存统计的更好方法?

double getUsedMemory()
{
    int tSize = 0, resident = 0, share = 0;
    ifstream buffer("/proc/self/statm");
    buffer >> tSize >> resident >> share;
    buffer.close();

    return  (double)(resident - share) / ToMBfromB * sysconf(_SC_PAGE_SIZE);
}

1 个答案:

答案 0 :(得分:0)

我会使用valgrind并针对您怀疑有内存泄漏的任何内容运行它。使用statm(或top等)并不是告诉程序泄漏的最好方法 - 它可以告诉你程序大小正在增加,但这并不一定是由于泄漏造成的。例如,分配模式可能导致堆中的碎片,这可能会迫使分配器增加堆以获取足够大的连续跨度以包含请求的分配。我并不是说你的样本就是这种情况,但这只是不使用statm来推断存在内存问题的众多原因之一。

简洁地说,valgrind是找到泄漏的工具;用它。