Сборка мусора при компиляции в C - PullRequest
17 голосов
/ 05 января 2011

Каковы методы сборки мусора при компиляции языка сборки мусора в C?Я знаю о двух:

  1. поддерживать теневой стек, который явно сохраняет все корни в структуре данных

  2. использовать консервативный сборщик мусора, такой как Бем

Первый метод медленный, потому что вы должны поддерживать теневой стек.Потенциально каждый раз, когда вызывается функция, вам необходимо сохранять локальные переменные в структуре данных.

Второй метод также медленный и по своей сути не восстанавливает весь мусор из-за использования консервативного сборщика мусора.

У меня вопрос: каково состояние сборки мусора при компиляции в C. Обратите внимание, что я не имею в виду удобный способ сборки мусора при программировании на C (это цель сборщика мусора Boehm)просто способ сделать сборку мусора при компиляции в C .

1 Ответ

6 голосов
/ 05 января 2011

Потенциально каждый раз, когда вызывается функция, вам нужно сохранять локальные переменные в структуре данных.

Нет, вы не можете - вы можете оставить локальные переменныеC и все еще итерирует их: поместите все ссылочные переменные в массив и добавьте указатель на него в связанный список, к которому вы добавляете узел при вводе нового фрейма стека.1008 *

Тем не менее, вам придется перепрыгивать через некоторые основные обручи, если вы хотите поддерживать продолжения / нелокальные прыжки.В этом случае проще распределить все в куче.

...