Globale Speicherverwaltung in C ++ in Stack oder Heap?
Wenn ich deklarieren Sie eine Datenstruktur, die weltweit in einer C++ - Anwendung wird verbraucht stack-Speicher oder heap-Speicher ?
ZB
struct AAA
{
.../.../.
../../..
}arr[59652323];
Kommentar zu dem Problem - Öffnen
auch, was ist der Unterschied zwischen einer globalen Variablen und statischen Variablen (innerhalb einer Funktion). Sie Leben für das Leben das Programm...
zugestimmt aber Ihnen einen Unterschied zwischen Verfügbarkeit
@dspinozzi: die Konstruktoren für Globale Variablen aufgerufen werden, bevor main(), aber die Konstruktoren für statische Variablen bezeichnet man als das erste mal die Funktion aufgerufen wird. Beide Typen von Variablen sind in der Regel gespeichert, in der gleiche Teile des Arbeitsspeichers-ich denke, GCC, versetzt Sie in die .data-Abschnitt.
InformationsquelleAutor der Frage sameer karjatkar | 2009-07-23
Du musst angemeldet sein, um einen Kommentar abzugeben.
Da ich nicht zufrieden war mit den Antworten, und hoffe, dass die sameer karjatkar lernen will, mehr als nur eine einfache ja/Nein-Antwort, hier gehen Sie.
In der Regel ein Prozess 5 verschiedenen Bereichen des Arbeitsspeichers
Wenn Sie wirklich wollen, um zu erfahren, was gespeichert wird, wo dann Lesen und bookmarken Sie diese:
COMPILER, ASSEMBLER, LINKER, AND LOADER: A BRIEF STORY (siehe Tabelle w.5)
Anatomie eines Programms in den Speicher
alt-text http://www.tenouk.com/ModuleW_files/ccompilerlinker006.png
InformationsquelleAutor der Antwort Milan
Das problem ist hier die Frage. Nehmen wir an, Sie haben ein kleines C(++ wie gut Sie behandeln die gleiche Weise) Programm wie dieses:
main
gibt. Der string, da es eine Konstante zugeordnet, die in der statischen Daten-Raum zusammen mit den anderen Saiten.static
Schlüsselwort erzählt Sie, dass es nicht auf dem Stapel reserviert.buf1
ist auf dem stack, undmalloc
hat einen Rückgabewert von Interesse; Sie sollten immer den Rückgabewert überprüfen.Beispiel:
InformationsquelleAutor der Antwort Charlie Martin
In der Regel verbraucht es auch nicht. Er versucht, ordnen Sie in eine memory-segment, welches voraussichtlich konstant bleiben-Größe für die Ausführung des Programms. Es könnte sein, bss, stack, heap oder Daten.
InformationsquelleAutor der Antwort Tomek Kopczuk
Weder. Es ist .data-Abschnitt.
InformationsquelleAutor der Antwort EFraim
Globalen Speicher pre-allocated in einem festen Speicher-block, oder auf dem heap, je nachdem, wie Sie zugeordnet sind, durch Ihre Anwendung:
BEARBEITEN:
Die Frage ist verwirrend: , Wenn ich zuweisen eine Datenstruktur, die weltweit in einer C++ - Anwendung wird verbraucht stack-Speicher oder heap-Speicher ?
"reservieren"? Das könnte bedeuten, viele Dinge, einschließlich aufrufen von malloc(). Es wäre anders gewesen, wenn die Frage war "wenn ich das deklarieren und initialisieren Sie eine Datenstruktur, die weltweit".
Vor vielen Jahren, als wurden die CPUs immer noch mit 64K-Segmenten, einige Compiler waren klug genug, um dynamisch Speicher vom heap stattdessen zu reservieren, einen block in der .Daten-segment (aufgrund von Einschränkungen in der Speicher-Architektur).
Ich denke, ich bin einfach zu alt....
InformationsquelleAutor der Antwort Philippe Leybaert
Weder deklarieren Sie eine Datenstruktur, die Global in C++ verbraucht heap-oder stack-Speicher. Eigentlich Globale Variablen sind in der Regel zugeordnet, die in einem Daten-segment, dessen Größe bleibt unverändert während des ganzen Programms. Stapel und Haufen sind in der Regel verwendet für Variablen, die erstellt und zerstört während der Ausführung des Programms.
InformationsquelleAutor der Antwort DML
Das Globale Objekt selbst, belegen Speicher, der Laufzeit oder der compiler behält sich vor main ausgeführt wird, ist dies nicht eine variable Laufzeit Kosten also weder stack noch heap.
Wenn der ctor das Objekt Speicher reserviert, es werden in den heap, und alle nachfolgenden Zuweisungen von der Objekt-heap-Zuweisungen.
Kommt es auf die genaue Art der Globale Objekt, wenn es ein Zeiger oder das ganze Objekt an sich ist global.
InformationsquelleAutor der Antwort Rudi Bierach
Globale Variablen Leben auf dem heap. diese sind ein Sonderfall, denn Sie Leben für das Leben das Programm
InformationsquelleAutor der Antwort user128026
Wenn Sie explizit die Zuweisung der Speicher selbst, indem Sie neue oder malloc, dann wird es reserviert im heap. Wenn der compiler die Zuweisung der Speicher dann zugewiesen werden, auf den stack.
InformationsquelleAutor der Antwort srnayak