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.
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
?