Инициализация встроенных статических данных
Мне интересно, как и когда статические встроенные данные инициализируются в C++ (например, в gcc или clang). Я знаю, что это вопрос, специфичный для какой-то архитектуры, и он не имеет отношения к стандарту C++.
Я знаю, что для статических / глобальных не встроенных данных gcc использует .init
а также .fini
разделы для создания и разрушения объектов с такими квалификаторами, но это не будет работать для встроенных статических данных, потому что они могут быть инициализированы во многих единицах перевода, поэтому init
раздел завершится множеством инициализаций для одного объекта, что неверно.
Кто-нибудь знает, как работает реализация?
Чтобы быть ясным, меня интересует реализация инициализации этих встроенных переменных.
1 ответ
Реализация эквивалентна реализации локальной статики функции, которая также "рискует" повторно инициализироваться: создается и проверяется дополнительная защитная переменная, чтобы инициализация происходила только один раз. Сборки для этого процесса просто приятно.