- Segment BSS
-
En informatique, le nom .bss ou bss est utilisé par nombre de compilateurs et d’éditeurs de liens pour désigner une partie du segment de données contenant les variables statiques représentées initialement (càd, quand l’exécution commence) uniquement par des bits à zéro. On l’utilise souvent dans des expressions telles que « section bss » ou « segment bss ».
En C, les variables statiquement allouées sans initialisation explicite sont initialisées à zéro (pour les types arithmétiques) ou au pointeur nul (pour les types pointeurs). Les implementations de C représentent typiquement les valeurs et les pointeurs nuls comme une suite de bits mis à zéro (bien que le standard C ne le requière pas). Partant, la section bss inclut typiquement toutes les variables non utilisées déclarées au niveau du fichier (càd, en dehors de toute fonction) ainsi que les variable locale non initialisées déclarées avec le mot-clef
static
. Une implémentation peut aussi assigner des variables allouées statiquement initialisées avec une valeur codée par une suite de bits à zéro dans cette section bss.Typiquement, le chargeur de programme initialise la mémoire allouée pour la section bss quand il charge le programme. LEs systèmes d’exploitation peuvent utiliser une technique appelée « remplissage à la demande par des zéros » pour implémenter efficacement le segment bss (McKusick et Karels 1986). Dans un logiciel embarqué, le segment bss est lié à une mémoire qui est initialisée à zéro par l’exécuteur C avant que la fonction
main()
soit exécutée.Quelques interfaces binaire-programme prennent aussi en charge un segment sbss (pour “small data”). Typiquement, un code simple peut accéder à ces données en utilisant des instructions qui ne peuvent accéder qu’à une plage limitée d’adresses.
Historiquement, BSS (“Block Started by Symbol”) était une pseudo-opération en UA-SAP (United Aircraft Symbolic Assembly Program), l’assembleur développé dans les années 1950 pour l’IBM 704 par Roy Nutt, Walter Ramshaw, et leur équipe à la United Aircraft and Transport Corporation [1][2]. Le mot-clef BSS a été incorporé plus tard dans l’assembleur de FORTRAN (FORTRAN Assembly Program), l’assembleur standard d’IBM pour ses ordinateurs Série IBM 700/7000. Il définit une étiquette (càd un symbole) et réserve un bloc d’espace non initialisé pour un nombre donné de mots (Timar 1996).
Un auteur célèbre, programmeur en C, dit que « Certains aiment comprendre BSS comme “Better Save Space” (“ferait mieux d’économiser de la place”) dans la mesure où le segment BSS, ne comportant que des variables encore dépourvues de valeur, n’a pas vraiement besoin d’en stocker une image. La taille que le BSS va prendre à l’exécution est enregistrée dans le fichier objet, mais le BSS (contrairement au segment de données) ne prend en fait aucune place réelle dans le fichier objet. »[3]
Voir aussi
- Édition de liens
- Segment de données
- Segment de code
- Variable non initialisée
Références
- (en) W. Richard Stevens, Advanced Programming in the Unix Environment, Addison–Wesley, 1992 (ISBN 0-201-56317-7), p. Section 7.6
- Unix - Frequently Asked Questions (1/7), 1996
- A New Virtual Memory Implementation for Berkeley UNIX, University of California, Berkeley, 1986, p. 3
- Network Dictionary. Javvin Press, 2007, p. 70.
- Coding for the MIT-IBM 704 Computer October 1957, p. V-10
- Expert C Programming: Deep C Secrets, Peter van der Linden, Prentice Hall 1997, p. 123
Sources
- (en) Cet article est partiellement ou en totalité issu de l’article de Wikipédia en anglais intitulé « .bss » (voir la liste des auteurs)
Wikimedia Foundation. 2010.