что хранит сегмент BSS? - PullRequest
       2

что хранит сегмент BSS?

4 голосов
/ 25 апреля 2011

Я знаю, что сегмент BSS хранит неинициализированные глобальные и статические переменные и инициализирует их в ноль. Но что, если глобальная / статическая переменная инициализирована, и мой второй вопрос заключается в том, что я прочитал, что сегмент BSS не потребляет память, тогда где хранятся эти переменные? Спасибо

Ответы [ 2 ]

7 голосов
/ 25 апреля 2011

Возможно, вы прочитали, что сегмент BSS не занимает места в исполняемом файле на диске . Когда исполняемый файл загружен, сегмент BSS, безусловно, занимает место в памяти. Загрузчик ОС выделяет пространство и инициализирует его до нуля.

2 голосов
/ 25 апреля 2011

При инициализации глобальные / статические переменные сохраняются в сегменте .DATA. Когда вы объявляете данные в сегменте .DATA, вы предоставляете значения для этих данных, чтобы их нужно было хранить как часть исполняемого файла.

С другой стороны, вы только объявляете, сколько данных вам нужно для .BSS, поскольку вам не нужно знать, каковы значения. Поэтому, если ваша программа объявила о 2 ГБ неинициализированной памяти, то эти 2 ГБ не влияют на размер вашего исполняемого файла, вы не увидите его до тех пор, пока он не будет загружен.

...