Éditeurs de liens, chargeurs et exécutables

Quel est le principal objectif de la décoration de noms (mangling), par laquelle le compilateur C++ ajoute au nom d'une fonction des informations comme le type de ses arguments pour former le nom de symbole ?

  1. ARendre les noms de fonctions illisibles pour empêcher le vol du programme
  2. BRaccourcir les noms de fonctions pour réduire la taille de l'exécutable
  3. CPermettre à l'éditeur de liens de distinguer les fonctions de même nom aux types d'arguments différents (surcharge) et les espaces de noms
Afficher la réponse et l'explication

Réponse : C. Permettre à l'éditeur de liens de distinguer les fonctions de même nom aux types d'arguments différents (surcharge) et les espaces de noms

L'éditeur de liens compare les symboles uniquement par leur chaîne de nom. En C++, on peut créer des fonctions de même nom comme « print(int) » et « print(double) », impossibles à distinguer telles quelles. Le compilateur intègre donc au nom le type des arguments, etc., comme « _Z5printi ». Les fonctions C n'étant pas décorées, pour appeler une fonction C depuis C++, on ajoute « extern "C" » afin de supprimer la décoration.

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

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

  1. Quel est l'usage le plus approprié de la fonction dlopen de Linux (équivalent de LoadLibrary sous Windows) ?
  2. Lorsque 100 processus utilisent la même bibliothèque partagée, quelle est l'utilisation correcte de la mémoire physique ?
  3. En désassemblant un fichier objet, on constate que la destination de l'instruction appelant la fonction externe printf a une valeur provisoire comme 0. Quand cette valeur est-elle correctement renseignée ?
  4. Quel est le rôle d'un script d'édition de liens (linker script) utilisé en développement embarqué ?
  5. Sur un microcontrôleur sans OS, quel traitement le code de démarrage effectue-t-il juste après la mise sous tension, avant d'appeler main ?

Comparatifs sur ce thème