Я добавил свои пользовательские распределители для libxml2 в проект, и я вижу список выделенных и бесплатных вызовов. Я пытаюсь проверить, как 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 definitevely не имеет никаких идей о том, сколько памяти ему потребуется, и он уже представил вам интерфейс, чтобы сделать это самостоятельно. Я уверен, что разработчики библиотек не должны вносить изменения в свой конкретный случай, а скорее предоставить вам интерфейс для его обработки. – keltar
у них есть набор функций по умолчанию, о которых я спрашивал, если у них есть некоторые функции такого рода. У них есть некоторые функции для обнаружения утечек памяти и перезаписывания. В любом случае спасибо большое, я это ценю, но это не отвечает на мой вопрос :(. –