Должен ли я установить глобальное значение vars при запуске или при первом использовании? C ++ - PullRequest
0 голосов
/ 22 мая 2010

У меня есть несколько глобальных переменных, для которых нужно установить значение, следует ли мне установить его в функции main / winmain? или я должен установить его при первом использовании каждой переменной?

Ответы [ 3 ]

4 голосов
/ 22 мая 2010

Вместо этого, как насчет вообще не использовать глобальные переменные?

Передайте переменные в качестве параметров функции нужным им функциям или сохраните указатели или ссылки на них как члены классов, которые их используют.

1 голос
/ 22 мая 2010

Есть ли шанс, что вы не будете использовать глобальную переменную? Стоит ли рассчитывать какие-либо из них? Если так, то у вас есть аргумент для ленивой инициализации. Если они быстро рассчитываются или всегда будут использоваться, инициируйте их при запуске. Нет причин не делать этого, и вы избавите себя от головной боли от необходимости проверять инициализацию при каждом использовании.

0 голосов
/ 23 мая 2010

Когда компоновщик связывает вашу программу вместе, глобальные переменные (также известные как записываемые статические данные) присваиваются их собственному разделу памяти (раздел ELD .data) и им предварительно присваивается значение. Это будет означать, что компилятору не нужно будет генерировать инструкции для их инициализации. Если вы инициализируете их в основной функции, компилятор сгенерирует инструкции по инициализации, если он не достаточно умен, чтобы их оптимизировать.

Это, безусловно, верно для форматов файлов ELF, я не уверен насчет других исполняемых форматов.

...