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?
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.
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.
Tags und Links c++ assembly constructor elf destructor