我在一个项目中为 libxml2 添加了我的自定义分配器,我看到了一个 alloc 和 free 调用的列表。我要检查的是 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);