我有一个问题,我的程序使用的内存比我认为应该使用的要多得多。
我使用了valgrind,这是一个非常好的工具,可以发现内存问题,如缓冲区溢出和内存泄漏等。
问题在于,看起来不像是泄漏,只是使用不一致,与我认为应该使用的不符。
是否有另一种工具可以像使用调试器(如gdb)监视变量值一样监视内存使用情况?
massif告诉我,大部分堆内存是通过以下语句分配的:
我使用了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正在malloc的内存没有被释放,但我在几行代码后有另一个声明显式地执行了这个操作:
utarray_free(utarr_ctr_pdws);
UT_array是指针数组,因此不需要在UT_ICD帮助结构中定义任何额外的dtor函数。
如果有人使用UT_arrays的经验,或许可以解释一下为什么会占用那么多内存?