Wat is Name mangling?

Het vormen van symboolnamen door een C++-compiler door informatie over argumenttypen en namespaces in de functienaam op te nemen. Hierdoor kan de linker overloaded functies onderscheiden.

Japanse benaming: 名前修飾

“Name mangling” komt voor in 1 oefenvragen uit 1 onderwerpen, bijv. Linker, loader en uitvoerbare formaten.

Vakgebied: Linker, loader en uitvoerbare formaten

Nu oefenen: vragen over Name mangling

Wat is het belangrijkste doel van name mangling in C++, waarbij de compiler symboolnamen maakt door informatie zoals argumenttypen aan de functienaam toe te voegen?

  1. ADe functienamen onleesbaar maken zodat het programma niet kan worden gestolen
  2. BDe functienamen korten om het uitvoerbare bestand kleiner te maken
  3. CDe linker in staat stellen functies met dezelfde naam maar verschillende argumenttypen (overloading) en namespaces te onderscheiden
Antwoord en toelichting tonen

Antwoord: C. De linker in staat stellen functies met dezelfde naam maar verschillende argumenttypen (overloading) en namespaces te onderscheiden

De linker vergelijkt symbolen alleen op de tekenreeks van de naam. In C++ kunnen functies met dezelfde naam bestaan, zoals „print(int)” en „print(double)”, en die zouden zo niet te onderscheiden zijn. Daarom verwerkt de compiler argumenttypen en dergelijke in de naam, zoals „_Z5printi”. C-functies worden niet gemangled, dus bij het aanroepen van een C-functie vanuit C++ wordt „extern "C"” gebruikt om het mangelen te stoppen.

Vragen met “Name mangling” (1)

  1. Wat is het belangrijkste doel van name mangling in C++, waarbij de compiler symboolnamen maakt door informatie zoals argumenttypen aan de functienaam toe te voegen?

Verwante termen

Linker ASLR BSS-sectie Dynamisch linken Dynamische linker ELF Entry point Fragmentatie Gedeelde bibliotheek (shared library) GOT (global offset table)

Naar de woordenlijst