2009-08-04 3 views
1

Кто-нибудь пытался использовать autozone garbage collector от Apple? Или вы можете указать на хороший и настраиваемый, который можно использовать с C++?Использование сборщика мусора AutoZone

Редактировать: Я работаю на диаграммах принятия решений (например, BDD), поэтому я бы хотел проверить, эффективно ли управление памятью с помощью сборщика мусора.

Редактирование 2: Чтобы быть более точным, при реализации библиотеки для диаграмм принятия решений, вы должны реализовать сборщик мусора. Фактически, я уже сделал это для своей библиотеки, но он представляет собой более или менее 25% кода. И это самая сложная часть :-) Так что да, я хочу сборщика мусора :-) И да, я уже использую методы RAII. И, наконец, я не могу позволить себе стоимость shared_ptr, потому что я хранил миллиарды объектов, которые нужно собрать мусором.

ответ

1

Нет, я не пробовал. Вы можете попробовать this от hp labs, с подробными сведениями here. Этот коллекционер работает в Linux, * BSD, последних версиях Windows, MacOS X, HP/UX, Solaris, Tru64, Irix и нескольких других операционных системах.

2

Большинство людей склонны избегать сборщиков мусора в C++.

Они, как правило, не нужно, как только вы научитесь использовать RAII для управления ресурсами, а также потому, что C++ не имеет должной поддержки для сбора мусора, то ГХ, что существуют есть несколько проблем:

  • Они не ловите каждое распределение (они должны сделать консервативное предположение о том, ссылаются некоторые выделения или нет)
  • они не могут играть хорошо с деструкторами

конечно, есть ситуации, когда GC в C++ является полезно. Но 95% случаев, вам лучше будет просто обучиться соответствующим методам управления памятью (RAII).

Но я не использовал Autozone и не знаю, насколько хорошо он работает в вашем случае или вообще.

3

Вы уже проанализировали, действительно ли вам нужна неявная библиотека сбора мусора? вы уверены, что это не просто ностальгия java (или Objective C, ...)?

Это не является естественным в C++, поэтому вы, вероятно, столкнетесь с большим количеством проблем, чем вы решите. Фактические реализации в основном используются в экспериментальных тестах, а не для производственных приложений. Лучший способ сжать потенциал языка - это сделать то, что решается на этом языке.

Прежде всего, убедитесь, что явная сборка мусора (boost :: shared_ptr и friends) покрывает ваши потребности и не допускает сложностей, когда это возможно.

После редактирования Alexandre 2: Магия не существует. Я боюсь. Почему вы думаете, что сборщик мусора будет более эффективен, чем идиомы RAII.

Если вам не нужен подсчет ссылок, вы можете использовать scoped_ptr. Но если вам это нужно, вам придется заплатить за это, кроме того, насколько вы его скроете.

Возможно, ваша проблема заключается в распределении динамического количества объектов. Если они маленькие, вы найдете действительно интересную главу 4 («Распределение малых объектов») «Modern C++ Design» (Андрей Александреску).

+0

Вы также можете посмотреть контейнеры-указатели. У них нет накладных расходов памяти: http://www.boost.org/doc/libs/1_39_0/libs/ptr_container/doc/ptr_container.html –

+0

И вот реализация Small Object Allocator: http: // loki-lib. cvs.sourceforge.net/loki-lib/loki/include/loki/SmallObj.h?view=markup –

2

На самом деле, сбор мусора был частью будущего стандарта C++ 20XX, но был исключен по причине сложности реализации, сложности и т.д. ...

Так, конечно, много людей избежать GC в C++, но есть достаточно сильный спрос, который комитет по стандартам активно рассматривает.

Apple AutoZone - это агностический сборщик мусора, который может быть согнут для использования с C++. Разумеется, что AutoZone работает для Objective-C (и C), для хорошей реализации фундамента.

AutoZone также используется проектом MacRuby и, я считаю, несколько других проектов. Он предназначен для переносимости, хотя реализация имеет биты, специфичные для архитектур x86 и ppc, - при необходимости вам нужно будет перенести их на другие типы процессоров.

Коллектор имеет API, который может быть использован непосредственно для регистрации/UNREGISTER объектов и экспресс-связь и т.д. ...

Это не будет легко, но это, безусловно, выполнимо.

Смежные вопросы