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