C ++: Kiedy (i jak) są wywoływane C ++ Global Static Constructors?

Pracuję nad kodem C ++ i natknąłem się na pytanie, które przez jakiś czas mnie dręczy ... Zakładając, że kompiluję z GCC na hoście Linux dla celu ELF, gdzie są globalne konstruktory statyczne i destruktory nazywa?

Słyszałem, że w crtbegin.o jest funkcja _init, a w crtend.o funkcja _fini. Czy są one wywoływane przez crt0.o? Czy dynamiczny linker rzeczywiście wykrywa ich obecność w załadowanym pliku binarnym i wywołuje je? W takim razie,gdy czy to naprawdę je nazywa?

Interesuje mnie przede wszystkim wiedza, dzięki czemu mogę zrozumieć, co dzieje się za kulisami, ponieważ mój kod jest ładowany, uruchamiany, a następnie rozładowywany w czasie wykonywania.

Z góry dziękuję!

Aktualizacja: W zasadzie staram się ustalić ogólny czas, w którym konstruktorzy są nazywani. Nie chcę przyjmować założeń w moim kodzie w oparciu o te informacje, mniej więcej można uzyskać lepsze zrozumienie tego, co dzieje się na niższych poziomach podczas ładowania mojego programu. Rozumiem, że jest to dość specyficzne dla systemu operacyjnego, ale spróbowałem zawęzić to nieco w tym pytaniu.

questionAnswers(5)

yourAnswerToTheQuestion