__do_global_dtors_aux und __do_global_ctors_aux

8

Ich habe ein einfaches Programm in C ++ disassembliert und es gibt diese beiden Funktionsnamen. Ich denke, dass ctor Konstruktor bedeutet und dtor Destruktor bedeutet, und Wort global bedeutet vielleicht, dass sie globale Objekte erzeugen und zerstören. Ich kann den Namen aux nicht erraten. Was machen diese beiden Funktionen?

    
scdmb 25.06.2011, 11:41
quelle

2 Antworten

16

Die Adressen von -Konstruktoren und Destruktoren von statischen Objekten werden jeweils in einem anderen Abschnitt in ELF-Programmdatei gespeichert. Für die Konstruktoren gibt es einen Abschnitt namens .CTORS und für die Destruktoren den Abschnitt .DTORS .

Der Compiler erstellt zwei Hilfsfunktionen __ do_global_ctors_aux und __ do_global_dtors_aux , um die Konstruktoren bzw. Destruktoren dieser statischen Objekte aufzurufen.

Die Funktion

__ do_global_ctors_aux führt einfach einen Schritt im Abschnitt .CTORS aus, während __ do_global_dtors_aux nur für denselben Job ausführt. DTORS Abschnitt, der die Programm-Destruktoren Funktionen enthält.

    
Alok Save 25.06.2011, 11:46
quelle
9

Sie sind Hilfsfunktionen, die vom Compiler hinzugefügt wurden, um statische Objekte zu konstruieren und zu zerstören.

z.B.

%Vor%

some_global muss irgendwo tatsächlich konstruiert (und zerstört) werden, und C ++ garantiert, dass die Konstruktion vor main stattfindet. Eine Möglichkeit besteht darin, eine Funktion auszulösen, die vor main auftritt, die globale Objekte erzeugt, und eine weitere Funktion, die nach main ausgeführt wird, um sie zu zerstören.

Wenn Sie einen Haltepunkt im std::vector -Konstruktor festhielten und dieses Programm ausführen, zeigt der Stack-Trace die Funktion an, von der er initialisiert wurde.

    
Peter Alexander 25.06.2011 11:44
quelle