Задать вопрос
@beduin01

Как дефрагментируется память в языках без сборщика мусора?

Прочитал про работу сборщика мусора. Но возник вопрос, а как я языках в котором его нет происходит дефрагментация памяти? Или память там так и остается фрагментированной? Если да то к чему это приводит?

Правильно ли я понимаю, что языкам со сборкой мусора нужно ровно в два раза больше оперативной памяти т.к. нужно куда-то перемещать свободные блоки? Или там от алгоритма зависит? Если да, то какой средний оверхэд?
  • Вопрос задан
  • 249 просмотров
Подписаться 2 Оценить Комментировать
Пригласить эксперта
Ответы на вопрос 3
Как дефрагментируется память в языках без сборщика мусора

Как напишете - так и дефрагментируется. Если будете использовать стандартную кучу, то никак, поэтому постепенно будет расти потребление памяти, но, как правило оно будет стремиться с некоторому лимиту. Если это создает проблемы, то вариантов решения несколько:
- свой сборщик мусора с перемещением и дефрагментацией и реализация всех динамических объектов с использованием такого подхода
- реализация управления динамической памятью не приводящая к фрагментации, обычно с фиксированными размерами чанков, например на битмапах .
- минимизация запросов на выделение/освобождение динамической памяти, например, как уже упоминалось, через object pool'ы.

Правильно ли я понимаю, что языкам со сборкой мусора нужно ровно в два раза больше оперативной памяти т.к. нужно куда-то перемещать свободные блоки? Или там от алгоритма зависит? Если да, то какой средний оверхэд?

Сборка мусора не обязательно приводит к дефрагментации, дефрагментация происходит при перемещении. Перемещение обычно не требует никакого overhead'а.
Ответ написан
AtomKrieg
@AtomKrieg
Давай я поищу в Google за тебя
Через allocator и object-pool.
Ответ написан
@abcd0x00
В C функция free() ищет, какие блоки можно слить вместе, но это без перемещений. Например, один большой блок был занят данными A и B, при освобождении этих подблоков они сливаются обратно в один большой блок.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы