Jump to content

Сборщик мусора Бём

Сборщик мусора Бема-Демерса-Вайзера
Другие имена бдвгк
Оригинальный автор(ы) Ханс-Юрген Бем
Разработчик(и) Иван Майданский и др.
Первоначальный выпуск 1988 год ; 36 лет назад ( 1988 )
Стабильная версия
8.2.4 / 26 мая 2023 г .; 14 месяцев назад ( 26.05.2023 )
Репозиторий
Написано в С
Тип сборщик мусора
Лицензия аналогично X11 ( бесплатное программное обеспечение )
Веб-сайт www .hboehm .информация /гк / Отредактируйте это в Викиданных

Сборщик мусора Боэма-Демерса-Вайзера , часто известный просто как 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 , и предоставляет ряд расширенных функций, включая инкрементный сбор, параллельный сбор и разнообразную семантику финализатора .

  1. ^ Jump up to: а б Коранн, Сандип (2011), Справочник по инструментам с открытым исходным кодом , Springer, стр. 151–154, Bibcode : 2011hoos.book.....K , ISBN  978-1441977199 .
  2. ^ Ханс Бём, Сборщик мусора для C и C++.
  3. ^ Эндрю В. Аппель (1998), Современная реализация компилятора на C - « Консервативный сборщик мусора Бёма »,
  4. ^ Х. Дж. Бём и Д. Чейз, «Предложение по компиляции C, безопасной для сборщика мусора» , Журнал перевода на язык C, том 4, номер 2, декабрь 1992 г., страницы 126-141
  5. ^ Использование сборщика мусора в качестве детектора утечек
  6. ^ Использование сборщика мусора: простой пример.
  7. ^ «Интерфейс сборщика мусора» . www.hboehm.info .
  8. ^ Известные виды использования BDWGC
  9. ^ «Экзалуп/Кодон» . Гитхаб .
  10. ^ libgc-d
[ редактировать ]
Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: 4790a21cd5b63a4d87d6cd87d9322693__1712117760
URL1:https://arc.ask3.ru/arc/aa/47/93/4790a21cd5b63a4d87d6cd87d9322693.html
Заголовок, (Title) документа по адресу, URL1:
Boehm garbage collector - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)