2015-05-01 6 views
1

Неинициализированная статическая переменная всегда выделяется в BSS. В то время как раздел .bss является статическим, поскольку память выделяется во время компиляции. В соответствии с множеством книг «только переменные, которые инициализируются ненулевым значением, занимают пространство» в исполняемом файле. После загрузки программы в память неинициализированные статические переменные по-прежнему остаются .bss.Когда память будет выделена для «Неинициализированной статической переменной» при инициализации?

** Что происходит, когда функция инициализирует его? ** Будет ли он перенесен в другую область?

+1

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

+0

«Неинициализированная статическая переменная всегда выделена в BSS» не всегда верна –

ответ

1

При инициализации памяти выделяется «переменной Uninitialized Static» и это перемещается в секцию .data

код файла:.

int a,b,c; 

int main() 
{ 

a=1; 
b=2; 
c=3; 

scanf("%d",a); 
} 

Исполнение:

# size a.out 
text  data  bss  dec  hex filename 
1318  284  16 1618  652 a.out 

# size core.18521 
text  data  bss  dec  hex filename 
28672 180224  0 208896 33000 core.18521 (core file invoked as ./a.out) 
+0

Итак, она перемещается в раздел .data .. –

1

.bss не занимает занимаемое пространство в исполняемом файле. Когда программа запущена .bss выделяется и заполняется 0. Все не инициализированные объекты находятся там. Поэтому, когда вы инициализируете выделение переменных памяти.

2

остальные цитаты:

«В исполняемом файле, только переменные, которые инициализируются ненулевое значение занимают пространство.»

I.E. когда исполняемый файл загружается в память, необходимое пространство выделяется

Смежные вопросы