2010-07-01 3 views

ответ

3

Вы можете использовать Boehm's Garbage Collector. Многие проекты, с которыми я работал, используют его.

+0

Недостаток: он не является независимым от формы, поскольку большинство GC для C. –

+2

@Peter Miehle: Да, это: «В дистрибутив входят порты для большинства стандартных платформ для ПК и UNIX/Linux. Коллекционер должен работать на Linux, * BSD, последние версии Windows, MacOS X, HP/UX, Solaris, Tru64, Irix и несколько других операционных систем ». – amphetamachine

+0

@amphetamachine «Коллекционер не полностью портативен, но дистрибутив включает порты на большинство стандартных платформ для ПК и UNIX/Linux». –

0

Хотя я не знаю о хорошем, легком и эффективном GC для C, я хотел бы взвесить некоторые мысли.

В течение многих лет я избегал выделения кучи, опасаясь утечек памяти. И я не знаю, как получить утечку памяти без выделения из кучи.

Но я не знаю лучшего способа вернуть память из функции (например, строки или массива структур), чем путем распределения кучи. Выделение кучи позволяет вам точно выделять объем необходимой вам памяти, не зная, сколько памяти вам нужно во время компиляции. Если ваша программа будет загружать файлы в память, вы, вероятно, не будете знать во время компиляции, сколько памяти вам может понадобиться. Если вы отправляете статический маршрут памяти, вам всегда нужно выделять максимальную память, которая вам когда-либо понадобится. Тогда ваша программа может стать болотом памяти, когда это не обязательно. Куча лучше.

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

Итак, это сообщение отвечает на комментарий, что «Если у вас проблемы с C с помощью malloc() и free() правильно, вы должны переключиться на другой язык». Если проблема программирования сложна, и решение нуждается в распределении кучи, даже лучшим программистам придется отлаживать утечки памяти.

В некоторых программах может быть альтернатива использованию сборка мусора: вы можете предположить, что операционная система освободит все распределения программы, когда программа завершится. Таким образом, ваша основная программа может быть в состоянии вызвать вторую программу, которая использует распределение кучи, затем записывает результаты в файл и завершает работу. Я тестировал это на Windows. Я заметил, что Windows освободила память кучи, которую моя тестовая программа выделила на завершение тестовой программы. Я много раз запускал тестовую программу. Не было уменьшения доступной памяти.

Конечно, наличие второй программы, которая выполняется короткое время и заканчивается, часто не является жизнеспособным решением.

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