C ++: quando (e como) são construtores estáticos globais C ++ chamados?

Estou trabalhando em algum código C ++ e me deparo com uma questão que tem me incomodado há algum tempo ... Supondo que eu esteja compilando com o GCC em um host Linux para um destino ELF, onde estão os construtores e destrutores estáticos globais chamado?

Ouvi dizer que há uma função _init in crtbegin.o e uma função _fini in crtend.o. São chamados por crt0.o? Ou o vinculador dinâmico realmente detecta sua presença no binário carregado e os chama? Se então,quando isso realmente os chama?

Estou interessado principalmente em saber para que eu possa entender o que está acontecendo nos bastidores quando meu código é carregado, executado e depois descarregado em tempo de execução.

Desde já, obrigado!

Update: Estou basicamente tentando descobrir o tempo geral em que os construtores são chamados. Eu não quero fazer suposições no meu código com base nessas informações, é mais ou menos para obter uma melhor compreensão do que está acontecendo nos níveis mais baixos quando o meu programa é carregado. Eu entendo isso é bastante específico do sistema operacional, mas eu tentei reduzi-lo um pouco nesta questão.

questionAnswers(5)

yourAnswerToTheQuestion