Linker, Loader und ausführbare Formate

Was ist der Hauptzweck des „Name Mangling“, bei dem der C++-Compiler Symbolnamen durch Anfügen von Informationen wie Argumenttypen an den Funktionsnamen bildet?

  1. AFunktionsnamen unlesbar zu machen, damit das Programm nicht gestohlen wird
  2. BFunktionsnamen zu kürzen, damit die ausführbare Datei kleiner wird
  3. CDem Linker die Unterscheidung von Funktionen gleichen Namens mit unterschiedlichen Argumenttypen (Überladung) und von Namensräumen zu ermöglichen
Antwort und Erläuterung anzeigen

Antwort: C. Dem Linker die Unterscheidung von Funktionen gleichen Namens mit unterschiedlichen Argumenttypen (Überladung) und von Namensräumen zu ermöglichen

Der Linker vergleicht Symbole nur anhand der Namenszeichenkette. In C++ können Funktionen gleichen Namens wie „print(int)“ und „print(double)“ angelegt werden, die so nicht unterscheidbar wären. Der Compiler bettet daher Argumenttypen u. Ä. in den Namen ein, etwa „_Z5printi“. Funktionen in C werden nicht dekoriert; beim Aufruf von C-Funktionen aus C++ wird daher „extern "C"“ angegeben, um das Mangling zu unterbinden.

Dieses Thema üben Zur Themenseite

Weitere Fragen zu Linker, Loader und ausführbare Formate

  1. Welcher Verwendungszweck der Linux-Funktion dlopen (entspricht LoadLibrary unter Windows) ist am treffendsten?
  2. Wie wird der physische Speicher genutzt, wenn 100 Prozesse dieselbe Shared Library verwenden?
  3. Beim Disassemblieren einer Objektdatei hatte das Sprungziel des Befehls, der die externe Funktion printf aufruft, einen vorläufigen Wert wie 0. Wann wird dieser Wert korrekt eingetragen?
  4. Welche Aufgabe hat ein in der Embedded-Entwicklung verwendetes Linker-Skript?
  5. Welche Verarbeitung führt der Startcode bei einem Mikrocontroller ohne Betriebssystem unmittelbar nach dem Einschalten aus, bevor er main aufruft?

Vergleiche zu diesem Thema