| Zeile 44: | Zeile 44: | ||
==== Konstruktoren ==== | ==== Konstruktoren ==== | ||
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. | ||
| + | |||
| + | In neueren Version von GCC wurde die Sektion .ctors* in .init_array umbenannt und muss im gegebenenfalls im Linkerscript geändert werden. | ||
<cpp> | <cpp> | ||
| Zeile 68: | Zeile 70: | ||
==== Destruktoren (ohne --enable-__cxa_atexit und ohne -fuse-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. | ||
| + | |||
| + | In neueren Version von GCC wurde die Sektion .dtors* in .fini_array umbenannt und muss im gegebenenfalls im Linkerscript geändert werden. | ||
==== Destruktoren (mit --enable-__cxa_atexit oder mit -fuse-cxa-atexit) ==== | ==== Destruktoren (mit --enable-__cxa_atexit oder mit -fuse-cxa-atexit) ==== | ||