Борьба с фрагментацией в собственном менеджере памяти

Я написал диспетчер памяти a c/ C++ для распределения кучи (перегружен new/delete и malloc/realloc/free, основанный на malloc Дуга Ли, но рассчитан на свободное ожидание) и, похоже, имеет некоторые проблемы с фрагментацией. Есть ли какие-нибудь хорошие ресурсы, которые детализируют хорошие стратегии для избежания фрагментации через менеджера?

Обратите внимание, что я не могу переставить память, которая уже была выделена (без использования интеллектуальных указателей с GUID), и переписать систему для использования пулов вместо выделения кучи невозможно.

Спасибо,
Грант

2 ответа

Решение

Возможно, вы захотите получить вдохновение от jemalloc ( http://people.freebsd.org/~jasone/jemalloc/bsdcan2006/jemalloc.pdf) - этот распределитель явно используется в новом Firefox благодаря его возможностям антифрагментации.

Посмотрите, как это делают более зрелые проекты, такие как glibc.

Быстрый Google находит это со стеком ссылок.

Другие вопросы по тегам