Linker, loader en uitvoerbare formaten
Welk mechanisme waardoor in C++ de constructors van globale objecten vóór main worden uitgevoerd, is juist?
- ADe CPU vindt de constructors en voert ze automatisch eerst uit
- BDe compiler schrijft in de eerste regel van main altijd alle constructors over
- CDe adressen van de functies die constructors aanroepen worden in een tabel zoals .init_array verzameld en de opstartcode roept ze vóór main achter elkaar aan
Antwoord en toelichting tonen
Antwoord: C. De adressen van de functies die constructors aanroepen worden in een tabel zoals .init_array verzameld en de opstartcode roept ze vóór main achter elkaar aan
De compiler maakt voor elk bestand een functie die globale objecten initialiseert en zet het adres daarvan in een speciale sectie, .init_array. De linker voegt de .init_array van alle bestanden samen tot één tabel, en de opstartcode of de dynamische linker roept de functies in deze tabel vóór main achter elkaar aan. De verwerking bij beëindiging wordt omgekeerd verzameld in .fini_array. De volgorde van initialisatie over bestanden heen staat niet vast, dus men moet erop letten er geen afhankelijkheid van te maken.
Verder: nog 9 vragen over Linker, loader en uitvoerbare formaten