Concernant le segment bss et le segment de données dans Unix

J’ai lu dans mon livre unix que bss est utilisé pour stocker les variables non initialisées (déclarations globales). Cela signifie que les variables statiques sont stockées séparément et non dans le bss. Le seul autre endroit est le segment de données.

Voici ma question: Est-ce que bss segmente une partie du segment de données ou s’agit-il de deux ensembles de segments de mémoire complètement différents? Aussi, pourquoi conserver les variables globales séparément des variables statiques?

L’idée d’origine est toujours là, bien qu’il y ait des couches d’obfuscation sur les symboles locaux, les petites références, les bibliothèques partagées, etc.

Mais tout est toujours basé sur le modèle simple d’origine et cela vaut la peine de le savoir. L’idée est qu’il y a trois segments.

  • .texte
    Cela a un code de programme.
  • .Les données
    Cela a initialisé les données.
  • .bss
    Cela a des données non initialisées.

Bss est spécial: les objects .bss ne prennent pas d’espace dans le fichier object et en regroupant tous les symboles qui ne sont pas spécifiquement intialisés, ils peuvent être facilement mis à zéro.

Statique a quelques significations. En un sens, il s’agit simplement d’un atsortingbut de symbole qui indique à l’éditeur de liens s’il est local pour un module object ou s’il peut être lié globalement à d’autres symboles du même nom. Il est également utilisé pour spécifier la durée de stockage , pour distinguer les objects d’une fonction des objects automatiques (atsortingbués par stack).

Ainsi, une variable statique peut être dans les données ou bss, selon qu’elle est initialisée ou non, de même qu’une variable globale.

bss est traditionnellement ce qu’on appelle les variables non initialisées, mais C et Unix garantissent qu’elles sont initialisées à zéro. (Voir ceci .) C’est une partie du segment de données, généralement juste après l’espace de la variable initialisée de manière statique par le programme. Juste plus haut en mémoire que bss est généralement le début du tas.