Die Variablen werden in verschiedenen Speichersegmenten gespeichert.
Daten Der Datenbereich enthält globale und statische Variablen, die vom Programm verwendet und initialisiert werden. Dieses Segment kann weiter in einen initialisierten Nur-Lese-Bereich und einen initialisierten Schreib-Lese-Bereich unterteilt werden. Zum Beispiel würde die Zeichenkette, die in C durch char s[] = "hello world" definiert ist, und eine C-Anweisung wie int debug=1 außerhalb von "main" im initialisierten Schreib-Lese-Bereich gespeichert werden. Und eine C-Anweisung wie const char* string = "hello world" bewirkt, dass das String-Literal "hello world" im initialisierten Nur-Lese-Bereich und die Zeichenzeigervariable string im initialisierten Schreib-Lese-Bereich gespeichert wird. Beispiel: static int i = 10 wird im Datensegment gespeichert und global int i = 10 wird im Datensegment gespeichert
Heap Der Heap-Bereich beginnt am Ende des BSS-Segments und wächst von dort aus zu größeren Adressen. Der Heap-Bereich wird von malloc, realloc und free verwaltet, die die Systemaufrufe brk und sbrk verwenden können, um seine Größe anzupassen (beachten Sie, dass die Verwendung von brk/sbrk und eines einzigen "Heap-Bereichs" nicht erforderlich ist, um den Auftrag von malloc/realloc/free zu erfüllen; sie können auch mit mmap implementiert werden, um potenziell nicht zusammenhängende Regionen des virtuellen Speichers im virtuellen Adressraum des Prozesses zu reservieren). Der Heap-Bereich wird von allen gemeinsam genutzten Bibliotheken und dynamisch geladenen Modulen in einem Prozess gemeinsam genutzt.
Setzen Sie Ihre Untersuchungen fort unter wikipedia