Неинициализированная статическая переменная всегда выделяется в BSS. В то время как раздел .bss является статическим, поскольку память выделяется во время компиляции. В соответствии с множеством книг «только переменные, которые инициализируются ненулевым значением, занимают пространство» в исполняемом файле. После загрузки программы в память неинициализированные статические переменные по-прежнему остаются .bss.Когда память будет выделена для «Неинициализированной статической переменной» при инициализации?
** Что происходит, когда функция инициализирует его? ** Будет ли он перенесен в другую область?
внимательно рассмотреть ваши перефразировать:. «только переменные, которые инициализированы * ненулевое значение * занимать пространство» (курсив добавлен) что насчет переменных инициализируются до нуля? Они могут использоваться без дальнейшей инициализации, поэтому ваша кажущаяся интерпретация того, что инициализация времени выполнения должна что-то изменить, касается распределения пространства. Как указывали другие, претензия, о которой вы говорите, относится к исполняемому файлу *, а не к изображению исполняемой программы в памяти. –
«Неинициализированная статическая переменная всегда выделена в BSS» не всегда верна –