Изучить принципы работы сборщика мусора. Научиться управлять динамической памятью, автоматически освобождая неиспользуемые объекты для предотвращения утечек памяти.
Сборка мусора — это процесс автоматического управления памятью в программе, который позволяет освобождать память, занятую объектами, которые больше не используются.
- Подготовить общий Makefile для автоматического запуска проверки на утечки памяти
- Этот пулл-реквест принимается командой самостоятельно, но на проверку так же высылается.
- Каждый объект содержит счётчик ссылок, который отслеживает количество указателей, ссылающихся на этот объект.
- При создании нового указателя на объект счётчик увеличивается.
- При удалении или изменении указателя счётчик уменьшается.
- Если счётчик ссылок становится равным нулю, объект автоматически удаляется из памяти.
- Для хранения метаданных рекомендуется структура следующего вида:
typedef struct {
size_t count; // Счётчик ссылок
void *object; // Объект в динамической памяти
} ref_count_t;
- Для создания объектов из пункта 5 рекомендуется использовать pool-аллокатор из предыдущей работы
- Предусмотерть возможность использовать вместе со счётчиком циклов объекты произвольной природы: произвольное конструирование, произвольная деструктуризация
- Используются конструктры и деструкторы по-умолчанию, если не определено иное
- Создайте ситуацию, где два объекта ссылаются друг на друга, но больше не используются в программе. Убедитесь, что память не освобождается автоматически из-за циклической зависимости.
- Добавьте функцию, которая обходит объекты и обнаруживает такие циклы.
- Создайте функцию для удаления неиспользуемых объектов
- Тесты!
- Убедитесь, что память выделяется и освобождается корректно.