我正在開發一個使用一些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