Пусть есть программа:
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.
Подскажите, пожалуйста, законно ли использование спецификатора volatile для локального обхода требований строгих псевдонимов?
Почему Catch2 не логирует сообщения? В пустом TEST_CASE пишу INFO("42");После запуска в консоли получаю:
Я не очень хорошо знаком с SVG и маской, и я хотел бы знать, возможно ли, чтобы анимация, как на картинке, была бы при наведении мыши? (с JQuery или...
При клике на ссылку у меня срабатывает скрипт, который меняет содержимое страницыПытаюсь сделать так, чтобы каждый раз, при нажатии на одну...