Segment BSS

Un article de Wikipédia, l'encyclopédie libre.
Aller à : navigation, rechercher

En informatique, le nom .bss ou bss est utilisé par de nombreux compilateurs et éditeurs de liens pour désigner une partie du segment de données contenant les variables statiques représentées initialement (c'est-à-dire, 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 implémentations 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 requiert pas). Partant, la section bss inclut typiquement toutes les variables non utilisées déclarées au niveau du fichier (c'est-à-dire, en dehors de toute fonction) ainsi que les variables locales 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[1]. 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 [2],[3]. 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'est-à-dire un symbole) et réserve un bloc d’espace non initialisé pour un nombre donné de mots[4].

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 vraiment 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. »[5]

Voir aussi[modifier | modifier le code]

Références[modifier | modifier le code]

  1. (McKusick et Karels 1986)
  2. Network Dictionary. Javvin Press, 2007, p. 70.
  3. Coding for the MIT-IBM 704 Computer October 1957, p. V-10
  4. (Timar 1996)
  5. Expert C Programming: Deep C Secrets, Peter van der Linden, Prentice Hall 1997, p. 123

Bibliographie[modifier | modifier le code]

  • (en) W. Richard Stevens, Advanced Programming in the Unix Environment, Addison–Wesley,‎ 1992 (ISBN 0-201-56317-7), « Section 7.6 »
  • (en) Ted Timar, Unix - Frequently Asked Questions (1/7),‎ 1996 (lire en ligne), « Question 1.3 »
  • (en) Marshall Kirk McKusick et Michael J. Karels, A New Virtual Memory Implementation for Berkeley UNIX, University of California, Berkeley,‎ 1986 (lire en ligne), p. 3