Wo sind statische Variablen gespeichert (Daten-segment heap oder BSS)?
Erhielt ich widersprüchliche Meinungen über die statische variable Speicher.
Meinung 1 : "Ein Stapel statische variable speichert seinen Wert in der heap"
Meinung 2 : "Ein Stapel statische variable speichert seinen Wert in der Daten segment".
Ich bin verwirrt, mit diesen widersprüchlichen Antworten.
Wo genau sind statische Variablen gespeichert?
Ich erwarte ein Antworten mit Literatur (Lehrbücher, authentische tutorials, etc.).
Statische Variablen haben zwei Arten:
- static deklarierte Variablen innerhalb einer Funktion.
- global deklariert, die außerhalb der Funktion) statische variable.
Ich würde auch gerne wissen, ob es einen Unterschied in der Lagerung der beiden Typen von Variablen?
Dies ist möglicherweise ein Duplikat von stackoverflow.com/questions/93039/..., aber es ist schwer zu sagen, denn die OP scheint zum mix von "static" und "stack".
InformationsquelleAutor SIVA | 2010-03-25
Du musst angemeldet sein, um einen Kommentar abzugeben.
'Stack-Variablen" sind in der Regel gespeichert, über den "stack", die separat vom text, Daten, bss und heap Abschnitte des Programms.
In der zweiten Hälfte Ihrer Frage geht es um die 'statischen' Variablen, die unterschiedlich von stack - Variablen in der Tat, statische Variablen, die nicht live auf dem stack überhaupt. Klassisch, statische Variablen werden in der data-oder bss-Sektionen, Ihr Programm. Mit modernen Compilern, wenn die Daten ist const-qualifiziert, dann die Daten gespeichert werden können in den text-Abschnitt des Programms, die eine Vielzahl von Vorteilen (einschließlich durchgesetzt, nicht änderbar).
C-standard schreibt nicht vor, dass es einen stack, noch einen bss-Abschnitt. Es müssen lediglich den Speicherplatz für die Variablen mit den entsprechenden Laufzeiten.
InformationsquelleAutor Jonathan Leffler
Stack-Speicher ist zugewiesen, wenn Sie starten Sie Ihre Anwendung und bleibt immer die gleiche Größe, während der Ausführung der Anwendung. Es ist nicht gespeichert, die im DATEN-segment DATEN-segment ist für Dinge wie die Konstanten Werte an, die in der Anwendung verwendet wird (wie string-Literale).
InformationsquelleAutor reko_t
Sowohl lokale als auch Globale statische Variablen sind gehalten initialisiert Daten-Segmente
Gibt es zwei Daten-Segmente initialisiert Daten-segment und nicht initialisiertes Daten-segment.
Nicht initialisiertes Daten-segment auch als BSS.
Wenn wir sagen, dass die Daten-segment, per default initialisiert Daten-segment wird in diesem Abschnitt kopiert wird aus dem geladenen Bild von dem Programm. ( alle globalen Variablen und lokalen statischen Variablen initialisiert, um nicht-null-d.h. die ini var1_global = 10; )
Nicht initialisierten Daten segemnet aka BSS. In diesem Abschnitt werden mit null initialisiert generall, kurz bevor main() aufgerufen wird. Alle nicht initialisiertes Globale, lokale, statische, geht hier.
http://www.geeksforgeeks.org/memory-layout-of-c-program/
InformationsquelleAutor satya