Сборщик мусора Boehm

редактировать
Сборщик мусора Boehm – Demers – Weiser
Репозиторий Измените это в Викиданных
Написано наC и C ++
Тип сборщик мусора
Лицензия аналогично X11 (бесплатное программное обеспечение )
Веб-сайтwww.hboehm.info / gc /

Сборщик мусора Бем-Демерс-Вайзер, часто просто известный как Boehm GC, является консервативным сборщиком мусора для C и C ++, разработанным Hans Boehm, Alan Demers и Mark Weiser.

Boehm GC - это бесплатное программное обеспечение, распространяемое под разрешающей лицензией на свободное программное обеспечение, аналогичной лицензии X11.

Содержание

  • 1 Дизайн
  • 2 Эксплуатация
  • 3 Использование и порты
  • 4 Ссылки
  • 5 Внешние ссылки

Дизайн

Ганс Бем описывает работу коллектора следующим образом:

сборщик использует алгоритм очистки меток. Он обеспечивает инкрементный сбор и сбор по поколениям и операционные системы, которые обеспечивают правильную поддержку виртуальной памяти. (В настоящее время это включает SunOS [45], IRIX, OSF / 1, Linux и Windows с различными ограничениями.) Это позволяет вызывать код завершения при сборе объекта. Он может использовать информацию о типе для поиска указателей, если такая информация предоставляется, но обычно она используется без такой информации.

http://www.hboehm.info/gc/#details

Boehm GC также может запускать в режиме обнаружения утечек, в котором управление памятью по-прежнему выполняется вручную, но сборщик мусора Boehm может проверить, правильно ли это сделано. Таким образом, программист может найти утечки памяти и двойное освобождение.

Boehm GC также распространяется с библиотекой обработки строк C, называемой cords. Это похоже на ropes в C ++ (деревья постоянных небольших массивов), но вместо использования подсчета ссылок для правильного освобождения он полагается на сборку мусора для освобождения объектов. Шнуры хорошо справляются с обработкой очень больших текстов, их модификациями в середине, нарезкой, объединением и хранением истории изменений (функция отмены / повторения).

Операция

Сборщик мусора работает с большинством немодифицированных программ C, просто заменяя malloc () вызовами GC_MALLOC (), заменяя realloc () на GC_REALLOC () звонки и удаление бесплатных () звонков. В приведенном ниже фрагменте кода показано, как можно использовать Boehm вместо традиционного malloc и бесплатно в C.

#include #include #include int main (void) {int я; const 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; }

Для полноты картины boehm поддерживает явное освобождение через GC_FREE (). Всю замену можно выполнить с помощью макросов препроцессора.

Использование и порты

Сборщик мусора Boehm используется во многих проектах, реализованных на C или C ++, таких как Inkscape, а также в среде выполнения для ряда других языков, включая Crystal, Компилятор GNU для среды выполнения Java, проект Portable.NET, Embeddable Common Lisp, GNU Guile, реализация Mono платформы Microsoft.NET (также с использованием GC с точным уплотнением, начиная с версии 2.8), GNUstep опционально и libgc-d (привязка к libgc для языка программирования D, используется в основном в). Он поддерживает множество операционных систем, включая множество вариантов Unix (например, macOS ) и Microsoft Windows <39.>и предоставляет ряд дополнительных функций, включая инкрементный сбор, параллельный сбор и разнообразие семантики финализатора.

Ссылки

Внешние ссылки

  • Портал бесплатного программного обеспечения с открытым исходным кодом
Последняя правка сделана 2021-05-12 12:46:48
Содержание доступно по лицензии CC BY-SA 3.0 (если не указано иное).
Обратная связь: support@alphapedia.ru
Соглашение
О проекте