Was geht an RAM, Festplatte, Stack und Heap in C++?
Könnte jemand sagen, im Allgemeinen, was geht, was (Festplatte,RAM, Stack oder Heap), die zur Laufzeit in C++ für diese Fälle :
-
Lokale/Globale Variablen
-
Klassen, Methoden und Funktionen
-
Zeiger
-
Objekte
Und Stack - /Heap-beide befinden sich im physikalischen RAM?
Ich würde mich freuen, wenn jemand könnte umfassen hardware-Analogie in der Antwort.
Danke.
- Ich rieche den Hausaufgaben oder Prüfungsvorbereitung 🙂 Alles ist OK, solange die Frage gekennzeichnet ist angemessen.
- Don ' T mix up Programmiersprachen und EDV-hardware. Erstere ist die Sprache, die letztere bricht, wenn Sie es ablegen auf dem Boden. Programmiersprachen können verwendet werden, um anweisen, einen computer, aber Sie sind in Erster Linie eine abstrakte Konstruktion.
- SB: Wenn ich könnte dann sagen, wo das C++ anweisen, den computer, um Sie am Ende?
- C++ tut nichts. Es ist eine Sprache. Ihr compiler erzeugt Maschinencode-Anweisungen für Ihren computer basierend auf einem Programm, das in dieser Sprache.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Dies ist in der Regel abhängig von OS, aber es ist generell so:
Alles zum RAM. Die binary befindet sich in der Festplatte, aber wenn man ran, ist voll geladen, zusammen mit den abhängigen Bibliotheken in den RAM.
Stack und heap sind Implementierungsdetails, aber Sie befinden sich auch im RAM.
Zwar geladen, im RAM, der Speicher ist nicht direkt adressierbar. Das Betriebssystem ordnet den virtuellen Speicher für jeden Prozess. Dies bedeutet, dass die Adresse
0x001
ist nicht tatsächlich in der Lage zu0x001
im RAM, sondern repräsentiert eine Adresse im virtuellen Adressraum.EDIT: Klarstellung zu einer op Kommentare:
Sind Binärdateien, die vollständig oder teilweise zur Laufzeit geladen wird? Und, sind die Binärdateien, die nur zugänglich, nachdem zur Laufzeit oder continuisly Lesen von Festplatte?
Beispielsweise in MS, wenn Sie das linken gegen eine library, die es vollständig geladen ist, wird zur Laufzeit beim start des Programms. Wenn Sie laden Sie es über ein Programm, über
LoadLibrary()
ist es in den Speicher geladen, der Aufruf der Funktion, und kann aus dem Speicher entladen werden.LoadLibrary()
ist es in den Speicher geladen, der Aufruf der Funktion, und kann aus dem Speicher entladen werden.Alle von Ihnen gehen in den Speicher. Nun, die definition von "in memory" ist abhängig vom Betriebssystem, compiler und linker-Optionen, die ausführbare Datei-format und eine million andere Faktoren.
Auf vielen modernen Betriebssystemen, wenn ein Prozess erstellt wird, wird die ausführbare Datei in den Speicher gemappt sind (dies bedeutet, dass ein Speicherbereich reserviert war für die ausführbare Datei, aber das bedeutet nicht, dass die ausführbare Datei wurde geladen, der Ort steht noch nicht).
Einige Betriebssysteme geladen werden, die Teile der ausführbaren Datei zugegriffen wird (siehe "Verzögerung laden"), die häufiger für dynamisch geladene Bibliotheken (DLLs unter Windows, Shared Objects auf UNIX-ähnlichen Systemen). Dies vor allem Einflüsse der aktuellen "Lage" an Funktionen, sind Sie entweder auf "auf Festplatte" als ausführbare Datei, oder "in memory", wenn Sie, dass ein Teil der ausführbaren Datei zugeordnet wurde.
Variablen und alle anderen Programm die Daten gehen in den Speicher. Aber jedes Betriebssystem arbeitet mit virtuellem Speicher kann swap allen Ihrem Programm den Status " wird ausgeführt (einschließlich der stack und heap), um Datenträger, auf seine Bequemlichkeit, und dann später wiederherstellen es zurück zu halten, läuft Ihr Programm.
Schluss, alle Elemente auf Ihrer Liste (Variablen, Funktionen, etc.) im Speicher sind, obwohl dann möglicherweise nicht gespeichert werden, in "physical RAM" zu allen Zeiten.
In C++, wenn Sie speichern ein Programm, es geht um die Festplatte, wenn Sie anfangen zu kompilieren und führen Sie das Programm aus geht es in den Hauptspeicher (RAM). Alle Stack-und heap-Speicher ist Teil des ram-Speicher.
Gemäß der Deklaration von Variablen im Programm und Funktion Aufruf der Arbeitsspeicher ist. Standard-stack-Größe ist 2 MB(von googeln ) und seinen store alle lokalen Variablen in Ihrem Programm.
Heap enthält alle Daten, die erstellt wurden, während der Laufzeit, bedeutet, entweder durch
malloc
odernew