__ne_global_dtors_aux __ne_global_ctors_aux
J'ai démonté un simple programme écrit en C++ et il y a ces deux noms de fonction. Je suppose que ctor signifie constructeur et dtor signifie destructeur, et le mot global peut-être moyen qu'ils ont de créer et de détruire des objets globaux. Je ne peux pas deviner le nom de l'entrée aux. Ce que font ces deux fonctions?
aux = auxiliaire dictionary.reference.com/browse/auxiliary
Aussi, vous devez spécifier le processeur et le compilateur
Aussi, vous devez spécifier le processeur et le compilateur
OriginalL'auteur scdmb | 2011-06-25
Vous devez vous connecter pour publier un commentaire.
Les adresses de constructeurs et destructeurs des objets statiques sont stockés dans une section différente dans exécutable ELF. pour les constructeurs il y a une section appelée .CTORS et pour les destructeurs, il est le .DTORS section.
le compilateur crée deux fonctions auxiliaires __ne_global_ctors_aux et __ne_global_dtors_aux pour appeler les constructeurs et les destructeurs de ces objets statiques, respectivement.
__ne_global_ctors_aux fonction effectue simplement une promenade sur la .CTORS section, alors que la __ne_global_dtors_aux fait le même travail que pour le .DTORS la section qui contient le programme spécifié destructeurs fonctions.
__do_global_ctors_aux
.est ctors et dtors disponible uniquement en C++ binaires?
Ils pourraient être en D, je ne suis pas familier avec les détails d'implémentation (Ils sont dans le langage D, avant la compilation - mais c'est à prévoir que D est conçu comme une alternative à C++ sans C du patrimoine)
OriginalL'auteur Alok Save
Ils sont les fonctions auxiliaires ajouté par le compilateur pour construire et détruire des objets statiques.
par exemple
some_global
doit être construit (et détruites) quelque part, et C++ garantit que les travaux de construction qui se passe avantmain
. Une façon de le faire est d'émettre une fonction qui se passe avantmain
, qui construit des objets globaux, et une autre fonction qui se passe aprèsmain
pour les détruire.Si vous mettiez un point d'arrêt à l'intérieur de la
std::vector
constructeur et exécuté ce programme, la trace de la pile serait de vous montrer la fonction qu'il était en cours d'initialisation.OriginalL'auteur Peter Alexander