Éditeurs de liens, chargeurs et exécutables

En C, quelle affirmation concernant la valeur initiale d'une variable locale et d'une variable globale déclarées sans valeur initiale est correcte ?

  1. ALes deux commencent toujours à 0
  2. BLa variable locale commence à 0, mais la valeur de la variable globale est indéterminée
  3. CLa variable globale commence à 0, mais la valeur de la variable locale est indéterminée
Afficher la réponse et l'explication

Réponse : C. La variable globale commence à 0, mais la valeur de la variable locale est indéterminée

Les variables globales et statiques sont placées dans .bss, rempli de 0 au démarrage du programme, et commencent donc à 0. Les variables locales sont créées sur la pile à chaque appel de fonction ; comme les remplir de 0 à chaque fois prendrait du temps, des données ayant précédemment occupé cet emplacement peuvent subsister. Lire une variable locale non initialisée peut donner des résultats différents à chaque exécution ; il faut donc toujours l'initialiser avant usage.

S'entraîner sur ce thème Retour au thème

Autres questions sur Éditeurs de liens, chargeurs et exécutables

  1. À force de répéter malloc et free, il peut devenir impossible d'allouer un grand bloc d'un seul tenant alors que la mémoire libre totale est suffisante. Comment appelle-t-on ce phénomène ?
  2. Lors de la création d'une bibliothèque partagée, quel est l'avantage de n'exporter que les fonctions utilisées de l'extérieur et de régler la visibilité des symboles des fonctions internes sur « hidden » ?
  3. En C++, quel est le mécanisme correct par lequel les constructeurs d'objets globaux s'exécutent avant main ?
  4. Quelle affirmation concernant le fichier objet (.o) produit par le compilateur à partir d'un fichier source est correcte ?
  5. Quel est le rôle principal de l'éditeur de liens (linker) ?

Comparatifs sur ce thème