[Langage C] stockage de données

Chaque fonction a deux variables et les attributs, les types de données et de la classe de stockage de données

classe de stockage

automatique automatique

des données d'allocation dynamique de mémoire mémorisées dans la zone de mémoire dynamique
dans le paramètre de la fonction et les variables locales définies dans la fonction comprend des variables locales définies dans l'instruction composée
, lorsqu'elle est appelée, le système alloue variable d'espace de stockage, la fonction appel est libéré automatiquement à la fin de ces espace de stockage, auto peut être omis, la plupart des types de variables sont automatiquement
affectées à la valeur initiale est pas compilé, mais la valeur plutôt initiale à chaque fois un appel de fonction une fois de plus à la valeur initiale au moment de l'appel de fonction, ce qui équivaut à exécuter une instruction d'affectation
ne définit pas une variable avec une valeur initiale si sa valeur est une valeur imprévisible

statique statique

Continuer à maintenir la valeur d' origine ne disparaît pas après la valeur de l'appel de fonction, qui est occupée par l'unité de stockage ne sont pas libérés, le prochain appel ou la valeur initiale de la
variable locale statique est une classe de stockage statique, l' allocation unité de stockage dans la zone de stockage statique, pas dans le programme est en cours d' exécution libérer la
valeur initiale au moment de la compilation, les valeurs initiales qu'une seule fois au cours de l'essai, cette fois - ci a la valeur initiale (valeur initiale si non défini, il est automatiquement attribuée à 0 ou moment de la compilation vide)
des variables locales statiques existent encore après la fin de l'appel de fonction, Cependant, d' autres fonctions ne peuvent pas le citer

registre registre

La valeur de la variable locale dans les registres CPU (la fréquence d'utilisation variable)

extern externe

Dynamique et le stockage de mémoire statique

stockage dynamique

Effectué au cours de l'exécution du programme allocation dynamique nécessaire
paramètre de fonction, les variables automatiques (sans utiliser les variables statiques déclarées), sauvegarde et adresse retour de l'appel de la fonction
de ces données, allouer de la mémoire dynamique dans l'appel de fonction fonction de démarrage à la fin de l'espace est libéré, et la libération de cette allocation est dynamique, l' espace de stockage variable locale deux appels si la même fonction dans un programme, il peut ne pas être affectés au même

stockage statique

Allocation fixée par la mémoire du système pendant l' exécution des programmes
variables globales toutes stockées dans la zone de stockage statique, lorsque le démarrage du programme, le programme de stockage de variable globale allouée est terminée sur la libération

statique

Espace pour les variables locales avec déclarer d'allocation statique dans la zone de stockage statique, la variable ne libère pas pendant toute l' exécution du programme, il est toujours affecté
à des variables globales déclarées à la variable statique est limitée à la portée de ce module de documents

La zone de stockage

1, la zone de pile (Stack)

- alloué par le compilateur libéré automatiquement, les paramètres de fonction stockés, les variables locales, et analogues. Fonctionnent de manière similaire à une structure de données en pile.
Appliquer
aussi longtemps que l'espace de la pile restante est supérieure à l'espace d'application, le système fournira la mémoire de programme, sinon il signale une exception dans le débordement de la pile.
Dans Windows, la pile est détendu à la structure de données d'adresse basse est une zone contiguë de la mémoire. Cela signifie que la capacité maximale de l'adresse de la pile et la pile système prédéterminé est bon, sous Windows, la taille de la pile est 2M (certains disent 1M, en bref, il est une des constantes de compilation), si lorsque les applications spatiales dépasse l'espace restant sur la pile , vous serez invité à débordement. Par conséquent, moins d' espace obtenu à partir de la pile.
RESUME
Dans l'appel de fonction, le premier dans la pile est l'instruction suivante dans la fonction principale (instruction exécutable à une instruction d'appel de fonction) et l' adresse est fonction de divers paramètres, dans la plupart des compilateurs C , de droite à gauche est poussé arguments sur la pile, et est une fonction des variables locales. Notez que la variable statique n'est pas poussé sur.
Après la fin de l'appel de fonction, premier sorti pile de variables locales, les paramètres des derniers points de pointeur de pile à l'adresse de début de la mémoire, à savoir la fonction principale de l'instruction suivante, le programme continue à courir à partir de ce point.

2, la zone du segment de mémoire (tas)

- général assigné par la sortie du programmateur, si le programmeur ne libère pas à la fin du programme peut être récupéré par le système d' exploitation. Notez que la structure de données du tas sont deux choses différentes, mais la liste de distribution ajoutée est similaire à
l'application ,
vous devriez savoir que le système d'exploitation a une liste chaînée d'adresse de mémoire libre d'enregistrement, lorsque le système reçoit le programme d'application traversera la liste chaînée, trouver la première l'espace est plus grand que le nœud de l' espace de tas d'applications, le noeud est supprimé à partir du nœud de liste libre et attribuer le nœud au programme spatial, en outre, pour la plupart des systèmes, il sera le premier dans cet espace de mémoire adresse taille de l' enregistrement de cette allocation, de sorte que le code peut corriger la déclaration de suppression a publié cet espace mémoire. En outre, étant donné que la taille de la taille de la pile pour trouver le noeud ne correspond pas nécessairement exactement à l'application, le système sauvegarde automatiquement dans la partie excédentaire de la liste libre.
La pile est détendu à la structure de données à haute adresse ne sont pas zone de mémoire continue. En effet , le système est une liste chaînée de mémoire libre pour stocker l'adresse d'une nature discontinue, et la direction de la liste est de traversal faible à des adresses plus élevées. La taille tas est limitée par le système informatique de la mémoire virtuelle efficace. Ainsi, l'espace disponible tas plus souple, est relativement grande.
Le contenu
est généralement dans la pile avec un octet d' en- tête magasin taille du tas. Le contenu spécifique des arrangements de programmeurs en tas.

3, zone globale (zone statique) (static)

Les variables globales et les variables statiques sont stockées sur un morceau de l'initialisation des variables globales et les variables statiques dans une zone, non initialisé les variables globales et les variables statiques non initialisées dans une zone adjacente à l'autre. - Après la sortie d'un programme systématique

4, Aire de littéraux

- chaîne constante est placée ici. Après la fin du programme publié par le système

5, la zone de code de programme

- stocker corps de la fonction binaire.

exemple

Insérer ici l'image Description

Publié huit articles originaux · louanges gagnées 0 · Vues 109

Je suppose que tu aimes

Origine blog.csdn.net/qq_43915356/article/details/105291522
conseillé
Classement