Segment de donnéesEn informatique, un segment de données est la portion d’espace d’adressage virtuel d’un programme, qui contient les variables globales et les variables statiques qui sont initialisées par le programmeur. Cette portion a une taille fixe pour chaque programme, qui dépend de son contenu, dans la mesure où toutes les données sont affectées par le programmeur avant le chargement du programme. Noter que le segment de données n’est pas en lecture seule, puisque les valeurs de ces variables peuvent être altérées à l’exécution. En cela, il s’oppose à la section “Rodata” (« read-only data », données constantes et en lecture seule), tout comme au segment de code. L’architecture PC prend en charge peu de régions de mémoire avec un accès en lecture-écriture basique pour un programme : la pile, le segment de données et le segment de code. Mémoire accessible par un programmeLa mémoire d’un programme informatique est divisée ainsi :
Segment de donnéesLe segment de données contient les variables globales et statiques utilisées par le programme et qui sont initialisées. On peut y distinguer une zone en lecture seule et une zone en lecture-écriture. Par exemple, la chaîne de caractères définie par Segment BSSLe segment BSS aussi connu comme zone de données non initialisées commence à la fin du segment de données et contient toutes les variables globales et toutes les variables statiques qui sont initialisées à zéro ou n’ont pas d’initialisation explicite dans le code source. Par exemple, une variable déclarée TasLe tas commence à la fin du segment BSS. Le tas est géré par PileLa pile accompagne traditionnellement le tas binaire et augmente dans la direction opposée ; quand le pointeur de pile rencontre le pointeur de tas binaire, la mémoire libre a été épuisée (dans des espaces d’adressage modernes et vastes, et avec les techniques de mémoire virtuelle, ils peuvent se trouver n’importe où, mais vont quand même croître dans deux directions opposées). La pile est une structure LIFO, généralement située dans la plus haute zone de la mémoire. Un registre de pointeur de pile pointe sur le haut de la pile ; il est modifié à chaque fois qu’une valeur est empilée ou dépilée. L’ensemble des valeurs empilées par un appel à une fonction est appelé une « trame de pile » ; une trame de pile consiste au minimum en une adresse de retour. Voir aussiSources externes |