Борьба с фрагментацией в собственном менеджере памяти
Я написал диспетчер памяти a c/ C++ для распределения кучи (перегружен new/delete и malloc/realloc/free, основанный на malloc Дуга Ли, но рассчитан на свободное ожидание) и, похоже, имеет некоторые проблемы с фрагментацией. Есть ли какие-нибудь хорошие ресурсы, которые детализируют хорошие стратегии для избежания фрагментации через менеджера?
Обратите внимание, что я не могу переставить память, которая уже была выделена (без использования интеллектуальных указателей с GUID), и переписать систему для использования пулов вместо выделения кучи невозможно.
Спасибо,
Грант
2 ответа
Возможно, вы захотите получить вдохновение от jemalloc ( http://people.freebsd.org/~jasone/jemalloc/bsdcan2006/jemalloc.pdf) - этот распределитель явно используется в новом Firefox благодаря его возможностям антифрагментации.
Посмотрите, как это делают более зрелые проекты, такие как glibc.
Быстрый Google находит это со стеком ссылок.