automated memory management for c++
DESCRIPTION
TRANSCRIPT
![Page 1: Automated Memory Management for C++](https://reader034.vdocuments.mx/reader034/viewer/2022051110/54c2e5424a7959ad5c8b45e1/html5/thumbnails/1.jpg)
Автоматическое управление памятью
для С++
Руководитель: Д.Ю. Булычев
Грановский Александр, [email protected]Крень Мария, [email protected]
![Page 2: Automated Memory Management for C++](https://reader034.vdocuments.mx/reader034/viewer/2022051110/54c2e5424a7959ad5c8b45e1/html5/thumbnails/2.jpg)
Введение
Сборка мусора - это один из способов автоматического управления динамическойпамятью.
![Page 3: Automated Memory Management for C++](https://reader034.vdocuments.mx/reader034/viewer/2022051110/54c2e5424a7959ad5c8b45e1/html5/thumbnails/3.jpg)
Основные этапы сборки мусора
1) Найти roots
2) Пометить достижимые из roots объекты
3) Удалить непомеченные объекты
![Page 4: Automated Memory Management for C++](https://reader034.vdocuments.mx/reader034/viewer/2022051110/54c2e5424a7959ad5c8b45e1/html5/thumbnails/4.jpg)
Виды сборщиков мусора
● Консервативный
● Неконсервативный
![Page 5: Automated Memory Management for C++](https://reader034.vdocuments.mx/reader034/viewer/2022051110/54c2e5424a7959ad5c8b45e1/html5/thumbnails/5.jpg)
Задача
● Создать неконсервативный сборщик мусора, который подключался бы как header file.
![Page 6: Automated Memory Management for C++](https://reader034.vdocuments.mx/reader034/viewer/2022051110/54c2e5424a7959ad5c8b45e1/html5/thumbnails/6.jpg)
Существующие решения
![Page 7: Automated Memory Management for C++](https://reader034.vdocuments.mx/reader034/viewer/2022051110/54c2e5424a7959ad5c8b45e1/html5/thumbnails/7.jpg)
Инструменты
1) Утилита make2) GDB3) GCC4) Notepad5) С/С++
![Page 8: Automated Memory Management for C++](https://reader034.vdocuments.mx/reader034/viewer/2022051110/54c2e5424a7959ad5c8b45e1/html5/thumbnails/8.jpg)
Как пользоваться JBGC
1) Указатели нужно заводить, как gc_ptr<type_name>
2) New вызывать так: gc_new<type_name>();
![Page 9: Automated Memory Management for C++](https://reader034.vdocuments.mx/reader034/viewer/2022051110/54c2e5424a7959ad5c8b45e1/html5/thumbnails/9.jpg)
Пример
![Page 10: Automated Memory Management for C++](https://reader034.vdocuments.mx/reader034/viewer/2022051110/54c2e5424a7959ad5c8b45e1/html5/thumbnails/10.jpg)
Почему так?
● Поскольку мы неконсервативны, нужно следить за всеми указателями.
● Свой шаблонный gc_new, потому что new не знает тип.
![Page 11: Automated Memory Management for C++](https://reader034.vdocuments.mx/reader034/viewer/2022051110/54c2e5424a7959ad5c8b45e1/html5/thumbnails/11.jpg)
Нерешенные проблемы
![Page 12: Automated Memory Management for C++](https://reader034.vdocuments.mx/reader034/viewer/2022051110/54c2e5424a7959ad5c8b45e1/html5/thumbnails/12.jpg)
Нерешенные проблемы
![Page 13: Automated Memory Management for C++](https://reader034.vdocuments.mx/reader034/viewer/2022051110/54c2e5424a7959ad5c8b45e1/html5/thumbnails/13.jpg)
Нерешенные проблемы
● Не умеем при создании объекта использовать конструктор не по умолчанию.
● Используем много памяти, из-за чего время работы программы ухудшается. Данная проблема может быть решена использованием своей кучи.
![Page 14: Automated Memory Management for C++](https://reader034.vdocuments.mx/reader034/viewer/2022051110/54c2e5424a7959ad5c8b45e1/html5/thumbnails/14.jpg)
Результат работы
Мы работаем, но не всегда...
![Page 15: Automated Memory Management for C++](https://reader034.vdocuments.mx/reader034/viewer/2022051110/54c2e5424a7959ad5c8b45e1/html5/thumbnails/15.jpg)
Что будет дальше
![Page 16: Automated Memory Management for C++](https://reader034.vdocuments.mx/reader034/viewer/2022051110/54c2e5424a7959ad5c8b45e1/html5/thumbnails/16.jpg)
Планы
● Прикрутим кучу
● Компиляция программы с ключами
● Решим проблему конструирования объектов