Por qué el tipo int ocupa 8 bytes en la sección BSS pero 4 bytes en la sección DATOS

Estoy tratando de aprender la estructura de los archivos ejecutables del programa C. Mi entorno es GCC y procesador Intel de 64 bits.

Considere el siguiente código Ca.cc.

#include <cstdlib>
#include <cstdio>

int x;

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

lossize -o a muestra

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

Después agregué otra variable global inicializada y.

int y=10; 

lossize a muestra (dondea es el nombre del archivo ejecutable de a.cc)

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

Como sabemos, elBSS la sección almacena el tamaño de las variables globales no inicializadas yDATA almacena los inicializados.

Por quéint ocupa 8 bytes en BSS? lossizeof(x) en mi código muestra que elint en realidad ocupa 4 bytes.losint y=10 se agregaron 4 bytes a DATA, lo que tiene sentido desdeint debería tomar 4 bytes. Pero, ¿por qué agrega 4 bytes a BSS?

La diferencia entre dossize los comandos permanecen igual después de eliminar las dos líneas#include ....

Actualizar: Creo que mi comprensión de BSS es incorrecta. Es posible que no almacene las variables globales no inicializadas. Como dice Wikipedia "El tamaño que BSS requerirá en el tiempo de ejecución se registra en el archivo objeto, pero BSS (a diferencia del segmento de datos) no ocupa ningún espacio real en el archivo objeto". Por ejemplo, incluso el código de una línea Cint main(){} tienebss 8.

¿El 8 o 16 de BSS proviene dealignment?

Respuestas a la pregunta(1)

Su respuesta a la pregunta