我的程序使用的内存比我认为的要多得多
我使用过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的经验,也许你可以解释为什么它会消耗这么多内存?
答案 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>