0
我已經在項目中爲libxml2添加了自定義分配器,並且看到了alloc和free調用的列表。我試圖檢查的是,libxml2如何處理碎片,如果可以的話。程序可執行文件開始增加內存並且不會將其返回到操作系統。有一個libxml2文檔指出,如果操作系統決定返回的內存太小而且重複使用,則可能會發生這種情況。我的程序使用很多小的分配並釋放它們。其他應用程序使用基於線程的內存池,因此不會有泄漏的機會,這些池在處理程序調用的每次迭代中都會重置。我已經使用以下函數來覆蓋默認的分配器來檢查分配。任何幫助理解這可能會有所幫助。我曾嘗試在網站上搜索處理沒有成功的內存碎片。libxml2如何處理碎片
/* the function override the libxml2 default ones **/
void cfreeFunc(void* ptr);
void * cmallocFunc(size_t size);
void * cmallocAtomicFunc(size_t size);
void * creallocFunc(void *ptr, size_t size);
char * cstrdupFunc(const char *str);
xmlGcMemSetup(cfreeFunc, cmallocFunc, cmallocAtomicFunc, creallocFunc,
cstrdupFunc);
我的問題是libxml2提供任何種類的構建解決方案,以最大限度地減少碎片。我可以使用重載機制來插入jemalloc或其他分配器,儘可能減少它。在很多項目中使用libxml2可能會有一些內部解決方案。它確實跟蹤分配和內容。 –
爲什麼要這樣?它要求記憶,你的功能給它。然後它要求釋放這些內存。如果_your_ callee函數實際上沒有釋放它 - libxml有什麼問題?最好的辦法是分配大塊,然後將其用於進一步的分配 - 但是,libxml明確地沒有任何關於它需要多少內存的想法,並且它已經給你提供了自己製作的接口。我相信圖書館開發人員不應該爲你的具體情況做出修改,而是爲你提供處理它的界面。 – keltar
他們有我默認的那些功能,如果他們有這種功能的話。他們有一些功能來檢測內存泄漏和覆蓋。反正非常感謝,我欣賞這一點,但這不回答我的問題:(。 –