Qu'est-ce que Section BSS ?
Zone des variables globales et statiques sans valeur initiale (ou initialisées à 0). Seule sa taille est enregistrée dans le fichier, la zone étant remplie de 0 au chargement, ce qui n'alourdit pas l'exécutable.
Nom japonais: BSSセクション
Domaine: Éditeurs de liens, chargeurs et exécutables
Ce qui se retrouve dans .bss
Le langage C impose que tout objet à durée de stockage statique, c'est-à-dire les variables globales et static, commence à zéro si aucun initialiseur n'est fourni. Les compilateurs placent ces variables, et généralement aussi celles explicitement initialisées à 0, dans la section .bss. Les globales à valeur initiale non nulle vont dans .data, et les constantes qualifiées const dans la section en lecture seule .rodata. Le mot-clé static ne choisit pas la section ; il limite seulement la visibilité à un fichier. Les variables locales automatiques n'apparaissent jamais dans .bss, car elles résident sur la pile et n'ont pas de valeur initiale définie.
L'origine du nom
BSS se développe couramment en block started by symbol, un nom hérité d'une directive d'assembleur des premiers mainframes IBM qui réservait, sous une étiquette, un bloc de stockage non initialisé. Ce sens a survécu dans les formats objets Unix puis dans ELF, bien que la directive elle-même ait disparu depuis longtemps. Aujourd'hui, le nom désigne simplement la section des données initialisées à zéro, à côté de .text pour le code, .data pour les données initialisées et .rodata pour les constantes.
Questions fréquentes
Que signifie BSS ?
BSS se développe généralement en block started by symbol, d'après une ancienne directive d'assembleur. Dans les chaînes d'outils modernes, il désigne simplement la section des variables globales et static initialisées à zéro.
Un grand tableau non initialisé rend-il l'exécutable plus gros ?
Non. Un tableau global ou static sans initialiseur va dans .bss, où seule sa taille est enregistrée ; la mémoire est allouée et remplie de zéros au chargement du programme.
Quelle est la différence entre .data et .bss ?
La section .data contient les globales et static à valeur initiale non nulle, qui doivent être stockées dans le fichier. La section .bss contient celles qui commencent à zéro : elle occupe de la mémoire à l'exécution, mais aucune place pour un contenu dans le fichier.