Существуют ли средства для измерения фрагментации кучи работающего процесса?
Посоветуйте, пожалуйста, средство или метод, чтобы избежать фрагментации кучи в процессе, который вынужден часто выделять и освобождать небольшие кусочки памяти.
Спасибо.
Фрагментация диамической памяти ((С,С++))
Модератор: Модераторы разделов
-
korisk
- Сообщения: 205
- ОС: Xubuntu
Фрагментация диамической памяти
Registerd Linux user #486684 at http://counter.li.org/
-
NickLion
- Сообщения: 3408
- Статус: аватар-невидимка
- ОС: openSUSE Tumbleweed x86_64
Re: Фрагментация диамической памяти
Зависит от языка, вообще-то
Для C++ можно перегрузить операторы new/delete и встроить механизм подсчета. Для просто C - использовать не malloc/free, а собственные функции, которые потом уже будут malloc/free вызывать и кроме этого делать "черное" дело.
Ну, а еще можно анализировать структуру самой кучи - на предмет этого надо смотреть код - какая структура и как с ней работать.
1. Выделение небольших кусочков памяти вынести в отдельную кучу - а потом сносить ее к чертям
2. Продумать - стоит ли постоянно выделять эти участки? Может стоит завести массив и повторно использовать?
3. Небольшой оффтоп - сборщики мусора теоретически обладают способностью дефрагментации памяти - небольшой плюс в их сторону.
Спасибо сказали:
-
RasenHerz
- Сообщения: 1341
- ОС: Arch Linux amd64
Re: Фрагментация диамической памяти
Ну основная часть сделана уже за вас - ядро старается выделять смежные страницы памяти. Лично я каких-то специальных методик не знаю, но думаю если решаемая вами задача требует столь трепетного отношения к управлению памятью, то имеет смысл создать собственный диспетчер памяти (с пулом освобожденной памяти и т.д.). Неплохой пример создания такого диспетчера здесь.
Спасибо сказали: