Статические переменные размещаются внутри сегмента кода - они являются частью исполняемого образа и поэтому отображаются в уже инициализированном виде.
Статические переменные в области видимости функции обрабатываются одинаково, область видимости является исключительно конструкцией уровня языка.
По этой причине вам гарантируется, что статическая переменная будет инициализирована значением 0 (если вы не укажете что-то еще), а не неопределенным значением.
Есть и другие аспекты инициализации, которыми вы можете воспользоваться - например, общие сегменты позволяют различным экземплярам вашего исполняемого файла, запущенным одновременно, обращаться к одним и тем же статическим переменным.
В C ++ (с глобальным охватом) у статических объектов конструкторы вызываются как часть запуска программы под управлением библиотеки времени выполнения C. В Visual C ++ по крайней мере порядок, в котором инициализируются объекты, можно контролировать с помощью прагмы init_seg .