我正在开发一个使用一些glib数据结构(GHashTable,GSList等)的库。我一直在使用valgrind经常检查我的代码是否存在内存泄漏。 valgrind指出的大部分问题都很容易解决,但有一些我无法弄清楚。当使用glib数据类型时,Valgrind报告内存'可能丢失'
所有这些被报告为'可能丢失'。
在Valgrind的堆栈跟踪的顶部,我总是发现同样的4个库:
==29997== 1,512 bytes in 3 blocks are possibly lost in loss record 24 of 25
==29997== at 0x4004B11: memalign (vg_replace_malloc.c:532)
==29997== by 0x4004B6B: posix_memalign (vg_replace_malloc.c:660)
==29997== by 0x5E9AC4: ??? (in /lib/libglib-2.0.so.0.1200.3)
==29997== by 0x5EA4FE: g_slice_alloc (in /lib/libglib-2.0.so.0.1200.3)
在调用栈中再往下,总有一个油嘴函数的调用,如g_key_file_new(), g_slist_prepend(),g_strsplit(),g_key_file_load_from_file(),g_file_get_contents()。
我的问题是:
有没有人碰到,发现这个办法解决它?
或者这是我可以忽略的东西吗?是否由于glib使用内存池,如建议here?
我使用
- 的valgrind-3.5.0
- 巧舌如簧-2.12.3
- 海合会(GCC)4.1.2 20080704(红帽4.1.2-48)
- CentOS版本5.5(最终版)
使用G_SLICE = always-malloc运行程序显示没有丢失内存,证实了我怀疑所有(可能)内存丢失是由于内存池而发生的。感谢Havoc P的明确答案。 – ttreitlinger 2010-11-24 09:02:47