Maison  >  Article  >  développement back-end  >  Comment les variables statiques et globales sont-elles initialisées en C ?

Comment les variables statiques et globales sont-elles initialisées en C ?

DDD
DDDoriginal
2024-11-08 07:05:021007parcourir

How are Static and Global Variables Initialized in C  ?

Initialisation des variables statiques et globales en C

En C, les objets statiques et globaux avec une portée d'espace de noms sont initialisés différemment qu'en C. Voici une explication complète :

Initialisation Phases :

C initialise ces variables en trois phases :

  1. Initialisation zéro : tous les objets statiques sont mis à 0.
  2. Initialisation statique : objets avec les initialiseurs statiques sont initialisés.
  3. Initialisation dynamique : objets nécessitant l'exécution de code pour l'initialisation (objets non statiques) sont initialisés.

Initialisation des variables données :

Dans votre extrait de code :

  • global_int1 est initialisé à 5 pendant une période statique initialisation.
  • global_int2 est initialisé à zéro pendant zéro initialisation.
  • static_int1 est initialisé à 4 lors de l'initialisation statique.
  • static_int2 est initialisé à zéro lors de l'initialisation zéro.

Stockage et gestion des valeurs d'initialisation :

Lors de la compilation, les valeurs d'initialisation sont stockées dans le segment "data" de l'exécutable, à moins qu'ils ne soient const. Dans ce cas, ils sont placés dans le segment "texte".

Le système charge le segment "données" en mémoire, initialisant les variables statiques avec des initialiseurs statiques. Les variables sans initialiseurs ni initialiseurs dynamiques sont placées dans le segment "bss", qui est mis à zéro par le système avant l'exécution du code.

Note supplémentaire pour C 11

C 11 introduit constexpr, permettant à certaines fonctions définies par l'utilisateur d'être des initialisations statiques. Des variables locales de thread sont également introduites, ce qui complique encore les procédures d'initialisation.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn