"Munching" не относится к cfront
.
В C ++ ваши конструкторы и деструкторы вызываются неявно в зависимости от их времени жизни.
Глобальные статические объекты имеют время жизни всей программы.
Если у вас есть несколько глобальных статических объектов в разных единицах перевода,
кто строится первым?
Это зависит от компилятора, и его часто называют Статический порядок инициализации Fiasco .
Обычно вы не заботитесь о порядке построения, но если ваши объекты имеют пожизненные зависимости друг от друга, это может в итоге вас укусить. См. Следующие часто задаваемые вопросы о идиоматически избегая SIOF .
С учетом всего вышесказанного, "muncher" является генератором кода c.
Вы передаете все свои объектные файлы c ++ имени mangler,
и перенаправить вывод имени Манглера в мунчер.
*.o -> nm -> muncher -> *.c
Типичные реализации будут генерировать две таблицы функций
(массив указателей на функции для конструкторов и деструкторов)
+ немного сборки, чтобы убедиться, что они вызваны.
Бывают случаи, когда вы хотите конкретно указать компоновщику, какой порядок инициализировать,
и вот тут появляется мунчер.