监视/调试内存使用情况C.

时间:2012-04-03 15:16:22

标签: c memory-management

我的程序使用的内存比我认为的要多得多

我使用过valgrind,它一直是发现内存问题的天赐之物,例如缓冲区溢出和内存泄漏

我在这里遇到的问题是它看起来不像是泄漏,只是与我认为应该是不一致的用法

是否有其他工具可用于监视内存使用情况,就像使用调试器(如gdb)监视变量值一样?

massif告诉我,堆内存的大部分份额是通过以下语句分配的:

->98.80% (1,338,700,288B) 0x40341D5: caa (caa.c:196)

该语句是将元素推送到UT_array的调用,例如

utarray_push_back(utarr_ctr_pdws, &pdw);

pdw是指向结构的指针,是一个堆栈变量

所以看起来UT_array正在进行mallocing的内存并没有被释放,但是我还有另外几句话明确地说明了这一点:

utarray_free(utarr_ctr_pdws);

UT_array只是一个指针数组,因此不需要UT_ICD帮助程序结构中定义的任何其他dtor函数。

如果有人有使用UT_arrays的经验,也许你可以解释为什么它会消耗这么多内存?

2 个答案:

答案 0 :(得分:2)

valgrind massif就是这里的答案,它是一个堆内存分析工具(见http://valgrind.org/docs/manual/ms-manual.html

答案 1 :(得分:1)

我怀疑你的pdw结构中有一些东西可以为你分配空间。 utarray_free将不知道结构的成员,因此它只释放指向结构本身的指针。如果你对结构的任何成员都有malloc空间,utarray_free将不知道如何清除它们,除非你在UT_icd中设置一个dtor函数来释放alloc'd结构成员。 / p>