Инициализация данных inline stati c - PullRequest
1 голос
/ 02 февраля 2020

Мне интересно, как и когда stati c встроенные данные инициализируются в C ++ (например, в g cc или clang). Я знаю, что это вопрос, определенный c для некоторой архитектуры и не связанный со стандартом C ++.

Я знаю, что для статических / глобальных не встроенных данных g cc использует .init и .fini разделы для создания и уничтожения объектов с такими квалификаторами, но это не сработает для встроенных данных c, потому что они могут быть инициализированы во многих единицах перевода, так что раздел init будет иметь много инициализаций для один объект, который является неправильным.

Кто-нибудь знает, как работает реализация?

Чтобы было ясно, я заинтересован в реализации инициализации этих встроенных переменных.

1 Ответ

0 голосов
/ 03 февраля 2020

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

...