Почему тип int занимает 8 байтов в разделе BSS, но 4 байта в разделе DATA

Я пытаюсь узнать структуру исполняемых файлов программы C. Моя среда - GCC и 64-битный процессор Intel.

Рассмотрим следующий код Ca.cc.

#include <cstdlib>
#include <cstdio>

int x;

int main(){
  printf("%d\n", sizeof(x));
  return 10;
}

size -o a шоу

 text      data     bss     dec     hex filename
 1134       552       8    1694     69e a

После того, как я добавил еще одну инициализированную глобальную переменную y.

int y=10; 

size a показывает (гдеa имя исполняемого файла из a.cc)

 text      data     bss     dec     hex filename
 1134       556      12    1702     6a6 a

Как мы знаем,BSS раздел хранит размер неинициализированных глобальных переменных иDATA хранит инициализированные.

Зачемint занимает 8 байтов в BSS?sizeof(x) в моем коде показывает, чтоint на самом деле занимает 4 байта.int y=10 добавил 4 байта к данным, что имеет смысл, так какint должно занять 4 байта. Но почему он добавляет 4 байта в BSS?

Разница между двумяsize команды остаются прежними после удаления двух строк#include ....

Обновить: Я думаю, что мое понимание BSS неверно. Он не может хранить неинициализированные глобальные переменные. Как гласит Википедия: «Размер, который BSS потребует во время выполнения, записан в объектном файле, но BSS (в отличие от сегмента данных) не занимает фактического пространства в объектном файле». Например, даже однострочный код Cint main(){} имеетbss 8.

8 или 16 BSS происходит отalignment?

Ответы на вопрос(1)

Ваш ответ на вопрос