C ++代码内存泄漏

时间:2013-08-21 12:52:42

标签: c++ memory memory-leaks

我在Linux下的ARM CPU硬件上执行C ++代码。我在硬件上运行我的二进制文件并继续监视我的进程,看看它的内存使用量是否每隔半小时间隔就会增长。

top -p pid-of-process

查看列: RES 内存和顶部输出中的mem%

并检查

cat /proc/pid-of-process/status 

查看字段 VMRSS :这是我的流程的常驻设置大小内存。

我看到VMRSS和RES内存每1小时增加几百KiloBytes。该过程刚刚运行,没有测试正在运行,所以它一直在做同样的事情,并且负载不会变化。

现在我的问题是:这是否意味着我的代码中可能存在内存泄漏。

或者这种增加可能归因于其他东西,如果有的话?

检查是否有内存泄漏:

  1. 我查看了代码,看每个新的(动态内存运算符)都有相应的删除(空闲内存)

  2. 在valgrind memcheck上完成整个过程,并在报告中没有看到任何泄漏。我看

  3. 绝对丢失:0个块中的0个字节

    间接丢失:0个块中的0个字节

    可能丢失:7个块中的1,008个字节

    * *编辑:回答下面的arne评论。可能丢失的块来自pthread_create和glibc,所以不确定那是怎么回事?

    5个块中的720个字节可能在56的丢失记录27中丢失

    == 11151 ==在0x402732C:calloc(vg_replace_malloc.c:467)

    == 11151 == by 0x4010C34:allocate_dtv(dl-tls.c:300)

    == 11151 == by 0x40113D8:_dl_allocate_tls(dl-tls.c:464)

    == 11151 == by 0x404746C:pthread_create @@ GLIBC_2.1(allocatestack.c:571)**

    随着时间的推移,内存会增加多少?我怎样才能进一步调试以找到原因?

1 个答案:

答案 0 :(得分:0)

由于您无法找到直接泄漏,因此您似乎需要比较内存状态的快照以查看已更改的内容。快速搜索表明valgrind的地块可以做快照,并且有一个python script来比较它们(但如果你的程序很小,你可以用手比较)