Библиотеки для сборки мусора - PullRequest
4 голосов
/ 01 июля 2010

Есть ли "хорошие" библиотеки C для сборки мусора?

Я знаю о Беме, он поддерживается сейчас?

А как же http://tinygc.sourceforge.net?

Какой у вас опыт работы с этими библиотеками?

Ответы [ 2 ]

3 голосов
/ 01 июля 2010

Вы можете использовать Сборщик мусора Бома .Многие проекты, с которыми я работал, используют его.

0 голосов
/ 10 февраля 2013

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

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

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

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

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...