Сборщик мусора Бём
Другие имена | бдвгк |
---|---|
Оригинальный автор(ы) | Ханс-Юрген Бем |
Разработчик(и) | Иван Майданский и др. |
Первоначальный выпуск | 1988 год |
Стабильная версия | 8.2.4
/ 26 мая 2023 г |
Репозиторий | |
Написано в | С |
Тип | сборщик мусора |
Лицензия | аналогично X11 ( бесплатное программное обеспечение ) |
Веб-сайт | www |
Сборщик мусора Боэма-Демерса-Вайзера , часто известный просто как Boehm GC или сборщик мусора Боэма , является консервативным сборщиком мусора для C и C++. [1] разработанный Гансом Бёмом, Аланом Демерсом и Марком Вайзером . [2] [3]
Boehm GC — свободное программное обеспечение , распространяемое по разрешительной лицензии свободного программного обеспечения, аналогичной лицензии X11 . Первая статья, знакомящая с этим коллекционером, появилась в 1992 году. [4]
Дизайн
[ редактировать ]Ганс Бём описывает работу коллектора следующим образом:
Коллектор использует алгоритм развертки по меткам. Он обеспечивает инкрементальный и поколенческий сбор в операционных системах, которые обеспечивают правильную поддержку виртуальной памяти. (В настоящее время сюда входят SunOS[45], IRIX, OSF/1, Linux и Windows с различными ограничениями.) Это позволяет вызывать код финализации при сборе объекта. Он может использовать информацию о типе для поиска указателей, если такая информация предоставлена, но обычно она используется без такой информации.
Boehm GC также может работать в обнаружения утечек . режиме [5] в котором управление памятью по-прежнему осуществляется вручную, но GC Boehm может проверить, правильно ли это сделано. Таким образом, программист может обнаружить утечки памяти и двойное освобождение.
Boehm GC также распространяется с библиотекой обработки строк C, называемой шнурами. Это похоже на веревки в C++ ( деревья постоянных небольших массивов), но вместо использования подсчета ссылок для правильного освобождения объектов используется сбор мусора. Корды хорошо справляются с обработкой очень больших текстов, модификацией их посередине, нарезкой, объединением и сохранением истории изменений ( отмены функция /повтора).
Операция
[ редактировать ]Сборщик мусора работает с большинством немодифицированных программ на языке C, просто заменяя malloc() с GC_MALLOC() вызывает, заменяя realloc() с Вызовы GC_REALLOC() и удаление free() . вызовы [1] В приведенном ниже фрагменте кода показано, как можно использовать Boehm вместо традиционных malloc и free в C. [6]
#include <assert.h>
#include <stdio.h>
#include <gc.h>
int main(void)
{
int i;
const int size = 10000000;
GC_INIT();
for (i = 0; i < size; ++i)
{
int **p = GC_MALLOC(sizeof *p);
int *q = GC_MALLOC_ATOMIC(sizeof *q);
assert(*p == 0);
*p = GC_REALLOC(q, 2 * sizeof *p);
if (i == size-1)
printf("Heap size = %zu\n", GC_get_heap_size());
}
return 0;
}
Для полноты картины Бём поддерживает явное освобождение через GC_FREE() . [7] Все замены можно выполнить с помощью макросов препроцессора.
Использование и порты
[ редактировать ]Boehm GC используется во многих проектах. [8] которые реализованы на C или C++, например Inkscape , а также в средах выполнения для ряда других языков, включая Crystal , высокопроизводительный компилятор Python Codon, [9] компилятор GNU для среды выполнения Java, проект Portable.NET , Embeddable Common Lisp , GNU Guile , Mono реализация платформы Microsoft .NET (также с использованием точного сжатия GC, начиная с версии 2.8), GNUstep (необязательно) и libgc-d [10] (привязка к libgc для языка программирования D , используемого преимущественно в MCI ). Он поддерживает множество операционных систем , включая множество вариантов Unix (например, macOS ) и Microsoft Windows , и предоставляет ряд расширенных функций, включая инкрементный сбор, параллельный сбор и разнообразную семантику финализатора .
Ссылки
[ редактировать ]- ^ Jump up to: а б Коранн, Сандип (2011), Справочник по инструментам с открытым исходным кодом , Springer, стр. 151–154, Bibcode : 2011hoos.book.....K , ISBN 978-1441977199 .
- ^ Ханс Бём, Сборщик мусора для C и C++.
- ^ Эндрю В. Аппель (1998), Современная реализация компилятора на C - « Консервативный сборщик мусора Бёма »,
- ^ Х. Дж. Бём и Д. Чейз, «Предложение по компиляции C, безопасной для сборщика мусора» , Журнал перевода на язык C, том 4, номер 2, декабрь 1992 г., страницы 126-141
- ^ Использование сборщика мусора в качестве детектора утечек
- ^ Использование сборщика мусора: простой пример.
- ^ «Интерфейс сборщика мусора» . www.hboehm.info .
- ^ Известные виды использования BDWGC
- ^ «Экзалуп/Кодон» . Гитхаб .
- ^ libgc-d