Описание тега static-order-fiasco

Фиаско статического порядка относится к проблеме взаимозависимых статических инициализаций в разных единицах компиляции в C и C++. Порядок кода запуска зависит от компоновщика и поэтому часто непредсказуем.
11 ответов

Нахождение C++ статических проблем порядка инициализации

У нас возникли некоторые проблемы с фиаско статического порядка инициализации, и я ищу способы прочесать весь код, чтобы найти возможные вхождения. Любые предложения о том, как сделать это эффективно? Изменить: я получаю несколько хороших ответов о …
02 дек '08 в 20:40
1 ответ

В C++ простые фиктивные инициализации встроенного типа неуязвимы для статического порядка инициализации?

Я знаю о статическом порядке инициализации фиаско в C++ и конструкции при первом использовании, чтобы избежать этого. Таким образом, в приведенном ниже коде глобальное присвоение a может случиться до того foo::a и поэтому значение a не определено С …
2 ответа

C++ счётчик Шварца с thread_local

Могу ли я использовать счетчик Schwarz (он же Nifty counter), с thread_local? (Предполагая, что я заменяю все static с thread_local) Мне нужно это (помощник для Java JNI потоков): class ThisThread{ JNIEnv* jni_env{nullptr}; public: JNIEnv* getEnv(){…
09 ноя '17 в 12:45
2 ответа

Хранение указателей на статические переменные

Я создал фреймворк для модульного теста для C++, который я хочу портировать на C позже, и столкнулся с проблемой, когда модульный тест просто не запускается. Модульные тесты создаются в файлах.cpp, и только один файл.cpp должен запускать все тесты. …
07 июн '18 в 17:31
1 ответ

Показать порядок инициализации статических объектов C++ в программе?

Я пытаюсь получить дамп объекта для печати в порядке, в котором создаются статические объекты C++. я нашел -h для заголовков, но я не могу заставить objdump идти дальше. Программа составлена ​​без init_priority $ objdump -h cryptest.exe cryptest.exe…
1 ответ

std::thread::hardware_concurrency и статическая инициализация

Может ли эта глобальная функция пострадать от статической инициализации фиаско? template <typename TFn> void ParallelFor(int iIni,int iFin,TFn Fn) { static const unsigned int NThread= std::thread::hardware_concurrency(); // ... }
1 ответ

Неопределенная ссылка на статический член шаблона класса, на который ссылается статический экземпляр

Пожалуйста, обратите внимание на следующее: #include <string> #include <unordered_map> template <int N> class Object; template <int N> class Thing; template <int N> class Factory { private: using FuncPtr = Object<N&g…
1 ответ

Предоставляет ли IBM XL C/C++ init_priority?

Мы используем статический порядок инициализации C++ для управления созданием нескольких объектов в библиотеке C++. GCC предлагает init_priority и Microsoft предлагает init_seg(), Я ищу подобное с компилятором IBM XL C/C++, но мои результаты поиска н…
1 ответ

Статический порядок инициализации фиаско: тот же модуль компиляции?

Поэтому я создаю синтаксический компилятор с ANTLR, и часть сгенерированного кода выглядит следующим образом: const int ExampleClass::EXAMPLEVAR = OtherExample::OTHEREXAMPLEVAR; Как видите, это соответствует описанию "фиаско статического порядка ини…
15 мар '13 в 08:34
3 ответа

Воспроизведение статического порядка инициализации фиаско в C++

Я читал о фиаско статического порядка инициализации в C++, относящегося к сбою приложения. Я думаю, что понял это, но все еще есть несколько вопросов:1) Если я хочу воспроизвести эту проблему, как я могу это сделать (чтобы моя программа аварийно зав…
04 дек '09 в 06:50
2 ответа

Предотвращает ли автоматическая регистрация в Google Test статический порядок инициализации?

При использовании Google Test с C++11, если тесты определены для отдельных модулей компиляции, уязвим ли механизм автоматической регистрации для статического порядка инициализации? Если нет, то почему нет? ИЗМЕНЕНО ДЛЯ ДОБАВЛЕНИЯ: В частности: наско…
10 июл '17 в 17:56
5 ответов

Статический порядок инициализации фиаско

В своей книге "Мышление на С ++" (глава 10) Эккель описывает технику, впервые предложенную Джерри Шварцем для решения проблемы фиаско. Он говорит, что если мы хотим инициализировать x в 100 и y в 200 и разделить их между всеми единицами перевода, мы…
14 мар '11 в 13:19
2 ответа

Рандомизировать Сделать цели для цели

У меня есть библиотека C++, и у нее есть несколько статических объектов C++. Библиотека может пострадать от статической инициализации C++. Я пытаюсь проверить непредвиденные зависимости единицы перевода путем рандомизации порядка *.o файлы во время …
27 сен '16 в 04:50
1 ответ

Статический порядок инициализации фиаско: как мы можем гарантировать, что библиотека X будет связана только после того, как Protobuf будет сделан?

У нас есть 2 библиотеки - Google Protobuf (версия 4.2) и библиотека 'X'. Определенный объект X при инициализации использует определенные функции protobuf, что приводит к сбою нашего приложения, так как библиотека X сначала связывается, а затем Proto…
22 июн '15 в 12:25
4 ответа

Статический порядок инициализации фиаско

Я читал о SIOF из книги, и она привела пример: //file1.cpp extern int y; int x=y+1; //file2.cpp extern int x; int y=x+1; Теперь мой вопрос:В приведенном выше коде будут происходить следующие вещи? во время компиляции file1.cpp компилятор оставляет y…
4 ответа

Предотвратить статический порядок инициализации "фиаско", C++

Однажды я читал удивительный FAQ по C++ (это действительно хорошо!! https://isocpp.org/faq) и читал тему о том, как предотвратить статический порядок инициализации "фиаско". Поэтому автор советует обернуть статические переменные в функции, чтобы изб…
3 ответа

Преодоление статического фиктивного порядка инициализации, когда задействован одноэлементный объект

У меня есть одноэлементный класс, определенный в файле xh class x { public: static x* x_instance; static x* create_x_instance { if(!x_instance) x_instance = new x; return x_instance; } void someMemberFunction() private: x() { //some code} }; extern …
1 ответ

Компиляция нескольких исходных файлов в тесте Autoconf

Я работаю над тестом для GCC init_priority и MSC init_seg, Я хочу создать тест для компиляции и связывания двух исходных файлов в определенном порядке. У меня проблемы с поиском информации о компиляции и связывании двух исходных файлов с использован…
02 авг '18 в 22:31
6 ответов

C++ статический порядок инициализации

Когда я использую статические переменные в C++, мне часто приходится инициализировать одну переменную, передавая другую ее конструктору. Другими словами, я хочу создать статические экземпляры, которые зависят друг от друга. В пределах одного файла.c…
1 ответ

Статический порядок инициализации фиаско, iostream и C++11

Согласно спецификации C++11: Результаты в том числе <iostream> в переводческом блоке должно быть как <iostream> определил экземпляр ios_base::Init со статической продолжительностью хранения. Точно так же вся программа должна вести себя т…
20 окт '16 в 16:34