Linker, loader en uitvoerbare formaten

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.

Dit onderwerp oefenen Naar de onderwerppagina

Meer vragen over Linker, loader en uitvoerbare formaten

  1. Waarvoor wordt de Linux-functie dlopen (overeenkomend met LoadLibrary op Windows) het meest passend gebruikt?
  2. Hoe wordt het fysieke geheugen gebruikt als 100 processen dezelfde gedeelde bibliotheek gebruiken?
  3. Bij het disassembleren van een objectbestand bleek het sprongdoel van de instructie die de externe functie printf aanroept een voorlopige waarde zoals 0 te zijn. Wanneer wordt deze waarde juist ingevuld?
  4. Wat is de juiste rol van het linkerscript dat bij embedded ontwikkeling wordt gebruikt?
  5. Wat is de juiste verwerking die de opstartcode direct na het inschakelen uitvoert voordat main wordt aangeroepen op een microcontroller zonder OS?

Vergelijkingen bij dit onderwerp