C ++: когда (и как) вызываются глобальные статические конструкторы C ++?

Я работаю над некоторым кодом C ++ и столкнулся с вопросом, который мучил меня некоторое время ... Предполагая, что я компилирую с GCC на хосте Linux для цели ELF, где есть глобальные статические конструкторы и деструкторы называется?

Я слышал, что есть функция _init в crtbegin.o и функция _fini в crtend.o. Они вызваны crt0.o? Или динамический компоновщик фактически обнаруживает их присутствие в загруженном двоичном файле и вызывает их? Если так,when это действительно называет их?

Мне в основном интересно знать, чтобы я мог понять, что происходит за кулисами, когда мой код загружается, выполняется, а затем выгружается во время выполнения.

Заранее спасибо!

Обновление: я в основном пытаюсь выяснить общее время, в которое вызываются конструкторы. Я не хочу делать предположения в своем коде на основе этой информации, более или менее важно лучше понять, что происходит на более низких уровнях, когда моя программа загружается. Я понимаю, что это довольно специфично для ОС, но я попытался немного сузить его в этом вопросе.

Ответы на вопрос(5)

Ваш ответ на вопрос