| Zeile 31: | Zeile 31: | ||
== g++ == | == g++ == | ||
| − | Die Konstruktion der globalen/statischen Objekte ist unter g++ immer gleich. Nur die Destruktion der selben hängt von der Verwendung des configure-flags --enable-__cxa_atexit ab. | + | Die Konstruktion der globalen/statischen Objekte ist unter g++ immer gleich. Nur die Destruktion der selben hängt von der Verwendung des configure-flags --enable-__cxa_atexit und vom Kommandozeilenparameter -fuse-cxa-atexit ab. |
=== Konstruktoren === | === Konstruktoren === | ||
| Zeile 37: | Zeile 37: | ||
G++ erstellt eine "ctors*" Sektion, welche ein Array aus Funktionszeigern ist. Diese Funktionszeiger zeigen jeweils auf einen Konstruktor. Man muss nun nur dieses Array durchgehen und alle Funktionen aufrufen und schon hat man alle globalen/statischen Objekte initialisiert. | G++ erstellt eine "ctors*" Sektion, welche ein Array aus Funktionszeigern ist. Diese Funktionszeiger zeigen jeweils auf einen Konstruktor. Man muss nun nur dieses Array durchgehen und alle Funktionen aufrufen und schon hat man alle globalen/statischen Objekte initialisiert. | ||
| − | === Destruktoren (ohne --enable-__cxa_atexit) === | + | === Destruktoren (ohne --enable-__cxa_atexit und ohne -fuse-cxa-atexit) === |
G++ erstellt eine "dtors*" Sektion, analog zur "ctors*" Sektion und speicher dort wiederum ein Array aus Funktionszeigern. Diesmal zeigen diese Funktionszeiger aber auf Destruktoren. | G++ erstellt eine "dtors*" Sektion, analog zur "ctors*" Sektion und speicher dort wiederum ein Array aus Funktionszeigern. Diesmal zeigen diese Funktionszeiger aber auf Destruktoren. | ||
| − | === Destruktoren (mit --enable-__cxa_atexit) === | + | === Destruktoren (mit --enable-__cxa_atexit oder mit -fuse-cxa-atexit) === |
Im Konstruktor eines globalen/statischen Objekts wird die folgende Funktion aufgerufen: | Im Konstruktor eines globalen/statischen Objekts wird die folgende Funktion aufgerufen: | ||