Éditeurs de liens, chargeurs et exécutables
En C++, quel est le mécanisme correct par lequel les constructeurs d'objets globaux s'exécutent avant main ?
- ALe CPU détecte les constructeurs et les exécute automatiquement en premier
- BLe compilateur recopie toujours tous les constructeurs à la première ligne de la fonction main
- CLes adresses des fonctions appelant les constructeurs sont regroupées dans une table comme .init_array, et le code de démarrage les appelle successivement avant main
Afficher la réponse et l'explication
Réponse : C. Les adresses des fonctions appelant les constructeurs sont regroupées dans une table comme .init_array, et le code de démarrage les appelle successivement avant main
Le compilateur crée une fonction qui initialise les objets globaux de chaque fichier et place son adresse dans une section spéciale nommée .init_array. L'éditeur de liens regroupe les .init_array de tous les fichiers en une seule table, et le code de démarrage ou l'éditeur de liens dynamique appelle successivement ses fonctions avant main. Inversement, les traitements de fin sont regroupés dans .fini_array. L'ordre d'initialisation entre fichiers n'étant pas défini, il faut veiller à ne pas créer de dépendances.
Continuer : 9 autres questions sur Éditeurs de liens, chargeurs et exécutables