Это связано с отложенным выделением памяти или заполнением нуля по требованию , как описано ниже.
Это объясняется в инициализации нуля at cppreference:
Инициализация нуля выполняется в следующих ситуациях:
1 Для каждой именованной переменной со статическим или локальным потоком хранения, которая не подлежит постоянной инициализации (так какC ++ 14), перед любой другой инициализацией.
Таким образом, эта переменная квалифицируется.Что это означает инициализация нуля :
Эффект инициализации нуля:
- Если T - скалярный тип, начальное значение объекта равноцелочисленная константа ноль явно преобразуется в T.
- [...] Если T является типом массива, каждый элемент инициализируется нулями
В качестве оптимизации наиболее современныйсистемы даже не выделяют память для инициализируемых нулем глобальных / статических переменных, и поэтому размер массива не влияет на использование памяти.Что происходит вместо этого, исполняемый файл имеет метку, которая гласит: «здесь должны быть нулевые значения», и ничего более.Когда программа загружается, все адреса отображаются в небольшой и общий блок физической памяти, доступный только для чтения, который содержит нули.
Несколько виртуальных адресов могут отображаться в одну и ту же память через аппаратное обеспечение в ЦП, которое называется « Блок управления памятью » (MMU).Когда код пытается записать адрес в диапазоне, MMU уведомляет операционную систему (ОС), что кто-то записывает блок памяти только для чтения, и ОС выделяет память только тогда