2011-10-26 13 views

Respuesta

7

.bss consume "memoria" pero no espacio dentro del archivo ejecutable. Su único propósito es mantener datos inicializados cero (como usted sabe).

.data (y las secciones relacionadas como rodata) consumen espacio dentro del archivo ejecutable, y generalmente contiene cadenas, enteros y tal vez incluso objetos enteros.

Hay una gran cantidad de datos inicializados en cero en un programa típico, por lo que tener esos datos no consume más espacio en el archivo de salida es una ventaja significativa.

En cuanto a las secciones de datos * múltiples ... .rodata/.data se puede utilizar como una sugerencia para la protección de la memoria (no permite sobrescribir .rodata, permitir leer/escribir en .data).

+0

¿Puedes dar algunos ejemplos? Vista de memoria, instrucciones de asm, etc. – Bruce

+3

@Bruce: en tiempo de ejecución, básicamente no hay diferencia entre .data y .bss. La diferencia está en la salida del enlazador (una sección existe en el disco, la otra no) y en cómo el cargador ejecutable carga la sección. .data es una copia - el cargador puede usar memcpy ... .bss se pone a cero - el cargador puede usar memset. –

Cuestiones relacionadas