Пусть есть программа:
int aaa;
class b {
int bb;
public:
b(){}
};
b bbb;
int main(){
return 0;
}
Как известно, перед стартом main в переменную "aaa" будет записан ноль.
Вопросы:
P.S. Вопрос не праздный. Нужно понять, можно ли избежать принудительного обнуления статических объектов и тем самым ускорить старт функции main.
UPD1:
Видимо надо сделать пояснения.
Вопрос связан с работой встроенных систем. То есть таких систем, в которых код зашит в ПЗУ и стартует из ПЗУ. В таких системах нельзя проинициализировать статические переменные при загрузке, так как код живет в ПЗУ, а в ОЗУ по старту лежит мусор. То есть никакие
bbb:
.zero 4
aaa:
.zero 4
в таких системах не прокатывают. И именно что до main должен запускаться отдельный код для обнуления статических переменных. Вместе с тем, если код для обнуления статических переменных работает слишком долго, то это тоже плохо. Как-то я общался с разработчиками систем защиты в энергетике. У них было требование, чтобы защита начинала работать после подачи питания не позднее чем через полпериода промышленной частоты в 50 Гц , то есть не позднее, чем 10 миллисекунд (чтобы отключить оборудование если на линии висит КЗ). Если питание подано, а процессор вместо работы заполняет нулями статические переменные, то это не очень хорошо.
Поэтому возник вопрос - как управлять процессом обнуления статических переменных и можно ли это делать с помощью классов с пустыми конструкторами. Похоже, что нельзя, во всяком случае для GCC и clang.
Тут многое отдается на откуп реализации. В приведенном примере переменные никак не используются, а их инициализация не имеет побочных эффектов, соответственно они могут быть спокойно выкинуты компилятором. Если же они все-таки используются то
6.8.3.2 Static initialization [basic.start.static]
2 ... All static initialization strongly happens before (6.8.2.1) any
dynamic initialization.
main
:6.8.3.3 Dynamic initialization of non-local variables [basic.start.dynamic]
4 It is implementation-defined whether the dynamic initialization of a non-local non-inline variable with static
storage duration is sequenced before the first statement of main or is deferred. If it is deferred, it strongly
happens before any non-initialization odr-use of any non-inline function or non-inline variable defined in the
same translation unit as the variable to be initialized. 55 It is implementation-defined in which threads and
at which points in the program such deferred dynamic initialization occurs.
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Подскажите, пожалуйста, законно ли использование спецификатора volatile для локального обхода требований строгих псевдонимов?
Почему Catch2 не логирует сообщения? В пустом TEST_CASE пишу INFO("42");После запуска в консоли получаю:
Я не очень хорошо знаком с SVG и маской, и я хотел бы знать, возможно ли, чтобы анимация, как на картинке, была бы при наведении мыши? (с JQuery или...
При клике на ссылку у меня срабатывает скрипт, который меняет содержимое страницыПытаюсь сделать так, чтобы каждый раз, при нажатии на одну...