Das Speicherlayout eines C-Programms ist unten dargestellt. Es gibt nur sehr wenige Level. Sie sind:
Lassen Sie uns nun sehen, welche Funktion diese Abschnitte haben.
Sr.No | Abschnitt und Beschreibung |
---|---|
1 |
Stapel Der Prozessstapel enthält temporäre Daten wie Methoden-/Funktionsparameter, Rücksprungadressen und lokale Variablen. Es handelt sich um einen Speicherbereich, der automatischen Variablen und Funktionsparametern zugewiesen ist. Außerdem wird die Rücksprungadresse beim Ausführen eines Funktionsaufrufs gespeichert. Der Stapel verwendet den LIFO-Mechanismus (Last In First Out), um lokale oder automatische Variablen und Funktionsparameter zu speichern und die nächste Adresse oder Rücksprungadresse zu speichern. Die Rücksprungadresse bezieht sich auf die Adresse, zu der die Funktion nach Abschluss der Ausführung zurückkehrt. Die Größe dieses Segments variiert je nach lokalen Variablen, Funktionsparametern und Funktionsaufrufen. Das Segment wächst von höheren zu niedrigeren Adressen. |
2 |
Heap Dies ist Speicher, der dynamisch zugewiesen wird, während der Prozess ausgeführt wird. Dies ist der Speicherbereich, der für die dynamische Speicherspeicherung reserviert ist (z. B. malloc()- und calloc()-Aufrufe). Die Segmentgröße variiert auch je nach Benutzerzuteilung. Das Segment wächst von niedrigeren Adressen zu höheren Adressen. Lassen Sie uns nun überprüfen, wie sich die Segmentgrößen (Daten- und BSS-Segment) für einige Beispielprogramme ändern. Die Segmentgröße kann durch Ausführen des Befehls „size“ ermittelt werden. |
3 |
Text Dazu gehören die aktuelle Aktivität, dargestellt durch den Wert des Programmzählers und den Inhalt der Prozessorregister. Es wird durch den .text-Teil dargestellt. Dies definiert den Bereich im Speicher, in dem der Befehlscode gespeichert wird. Auch dies ist ein fester Bereich. |
4 |
Daten Dieser Abschnitt enthält globale Variablen und statische Variablen. Es wird durch den Abschnitt .data und .bss dargestellt. Der Abschnitt .data wird verwendet, um einen Speicherbereich zu deklarieren, in dem Datenelemente für das Programm gespeichert werden. Sobald ein Datenelement deklariert ist, kann dieser Abschnitt nicht mehr erweitert werden und bleibt im gesamten Programm statisch. Der Abschnitt .bss ist auch der statische Speicherabschnitt, der Puffer mit Daten enthält, die später im Programm deklariert werden. Dieser Pufferspeicher ist mit Nullen gefüllt. |
Das Datensegment kann in zwei weitere Teile unterteilt werden.
Das obige ist der detaillierte Inhalt vonSpeicherlayout des C-Programms. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!