C ++: Wann (und wie) heißen die C ++ Global Static Constructors?

Arbeite ich auf einige C++ - code, und ich habe laufen in eine Frage, die wurde nörgelnden mich für eine Weile... Vorausgesetzt, ich kompiliere mit GCC auf einem Linux host für ein ELF den Gegner, wo sind Globale statische Konstruktoren und Destruktoren aufgerufen?

Ich habe gehört es gibt eine Funktion _init in crtbegin.o, und eine Funktion _fini in crtend.o. Sind diese aufgerufen, indem crt0.o? Oder wird der dynamische linker eigentlich erkennen, Ihre Präsenz in der geladenen binären und Sie nennen? Wenn dem so ist, wenn sieht es eigentlich nennen?

Bin ich hauptsächlich daran interessiert zu wissen, so kann ich verstehen, was hinter den kulissen geschieht, wie mein code geladen wird, ausgeführt, und dann entladen zur Laufzeit.

Vielen Dank im Voraus!

Update: ich bin im Grunde versucht, um herauszufinden, die Allgemeine Zeit, zu der die Konstruktoren aufgerufen werden. Ich möchte nicht, dass Annahmen in meinem code basierend auf diesen Informationen ist es mehr oder weniger um ein besseres Verständnis von dem, was passiert auf den unteren Ebenen, wenn mein Programm geladen. Ich verstehe, das ist ziemlich OS-spezifisch, aber ich habe versucht einzugrenzen, ein wenig in dieser Frage.

InformationsquelleAutor der Frage Matthew Iselin | 2009-08-13

Schreibe einen Kommentar