Konstante vs. Statische Konstante

Lesezeit: 2 Minuten

Benutzeravatar von freonix
freonix

Wie ordnet der Compiler (zB GCC) zu const und static const Variable, wie in, wo würde es sich befinden? Im Datenspeicher oder Programmspeicher?

Benutzeravatar von Dietrich Epp
Dietrich Ep

Dies hängt von Ihrem System und davon ab, wie Sie die Variable verwenden. Zum static Variablen:

Fall 1: Sie verwenden die Variable nie, und der Compiler verwirft sie stillschweigend. Das kann mit nicht passieren extern Variablen.

Fall 2: Sie verwenden die Variable, aber Sie nehmen nie ihre Adresse. Der Compiler wandelt die Verwendung der Variablen in Direktoperanden um, als wäre es eine #define oder enum. Der Compiler kann immer noch konvertieren extern static zu unmittelbaren Operanden, aber es muss trotzdem eine Adresse dafür gefunden werden.

Fall 3: Sie verwenden die Variable und nehmen ihre Adresse, der Compiler ist gezwungen, einen Platz zu finden, um sie genau so in den Objektcode einzufügen, als ob sie es wäre extern.

Was “Daten” versus “Programm”-Speicher betrifft, nun, das ist sehr spezifisch für das System, das Sie verwenden. Auf meinem Linux x64/ELF-System wird es wahrscheinlich in die .rodata Abschnitt, der in dasselbe Segment wie Code geht (.text), aber ein anderes Segment als Read-Write-Datenabschnitte (.bss, .data). Mein System scheint kein separates Segment für schreibgeschützte, nicht ausführbare Daten zu erstellen.

Nachtrag: Beachten Sie, dass das Verhalten in C++ anders ist. In C++, a const Variable hat standardmäßig eine interne Verknüpfung, also static const ist überflüssig u extern const ist notwendig, um eine Konstante mit externer Verknüpfung zu erhalten.

Dietrich hat den Fall bereits erläutert static Variablen gut.

Für lokale Variablen hat die Compiler-Implementierung mehrere Möglichkeiten, wo a zugewiesen werden soll const qualifizierte Variable, für die die Adresse genommen wird. Es kann auf dem Stack oder im statischen Speicher zugewiesen werden oder nicht. Dies gilt insbesondere für const qualifizierte zusammengesetzte Literale. Die Adressen von zwei solchen Literalen, die lokal in unterschiedlichen Gültigkeitsbereichen deklariert sind, können zu einer zusammengefasst werden, und ihre Adressen können gleich sein.

1404660cookie-checkKonstante vs. Statische Konstante

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy