Was ist der Unterschied zwischen Heapspeicher und Hauptspeicher?


Antwort 1:

Wenn Sie "Hauptspeicher" sagen, nehmen Sie vermutlich "Adressraum" an. Ihr Betriebssystem behandelt die Unterscheidung zwischen "echtem Speicher" und "Adressraum".

Ich mache diese Unterscheidung, weil Sie viel mehr Adressraum haben können, als Sie jemals Speicher haben können. Windows hat zum Beispiel derzeit einen 64-Bit-Adressraum. Mit diesem Adressraum ist kein echter Speicher verknüpft. Ein Teil davon wird für Betriebssystem-Inhalte verwendet, andere für Treiber mit Speicherzuordnung, andere für Dateien mit Speicherzuordnung, einschließlich Auslagerungsdateien.

Sie können das Betriebssystem also fragen: "Reservieren Sie mir einen Block Adressraum". Sie können das Betriebssystem auch auffordern, entweder realen Speicher (pro Prozess oder von Prozessen gemeinsam genutzt) zuzuweisen, um diesen Adressraum zu sichern, oder für andere Zwecke, z. B. für Speicherzuordnungsdateien.

Heap-Blöcke sind beide Operationen in einer. "Ich brauche X-Bytes-Adressraum mit echtem Speicher". Diese Blöcke werden vom Betriebssystem verfolgt. In den meisten Fällen verfügt die Sprachlaufzeit auch über eine eigene Verwaltung, die sich für die Zuordnung von Dateien über den Heap-Blöcken befindet. Dies würde also als Speicherverwaltung / Heap-Verwaltung bezeichnet. Die C-Laufzeit verfolgt beispielsweise zugewiesene und freigegebene Blöcke, sodass kleinere Zuweisungen effizient durchgeführt werden können. Es wäre schrecklich ineffizient, das Betriebssystem ständig nach kleinen Blöcken zu fragen (z. B. 10 Bytes für eine Zeichenfolge). Die c-Laufzeitspeicherverwaltung, die bereits einen größeren Heap-Block zugewiesen hat, verteilt ihn in kleinen Blöcken.

Wie Jesse Pollard betonte, geht es mehr um die Verwendung. Wenn Sie das Betriebssystem direkt nach Adresse / Speicherplatz und Speicher dahinter fragen, gibt es eine Mindestzuordnungsgröße (normalerweise in „Seiten“) und Sie müssen den Speicher selbst verwalten. Wenn Sie einen Heap nach Speicher fragen, gibt es häufig keine Mindestzuordnungsgröße. Er übernimmt die Verwaltung für Sie.

Sie können viele Arten von Heaps haben, häufig weisen Software Heaps für verschiedene Zwecke zu und organisieren sie basierend auf der beabsichtigten Verwendung. Jeder dieser Heaps stammt aus dem Hauptspeicher, wird jedoch über APIs aufgerufen, die den Zugriff auf jeden Heap steuern.

Ein Beispiel wäre ein Haufen für die langfristige Datenspeicherung, mittelfristige und kurzfristige Speicherung. (C # und Java haben etwas von diesem Typ, glaube ich). Indem Sie festlegen, wie Sie die Datenstrukturen für jeden Heap übergeben, können Sie die Zuordnung und die kostenlosen Anforderungen wesentlich effizienter verarbeiten. Die Speicherzuweisung und -freigabe kann ansonsten bei Hochleistungssoftware eine erhebliche Belastung darstellen.


Antwort 2:

Was ist der Unterschied zwischen Heapspeicher und Hauptspeicher?

Keiner.

Heap ist eine Speichernutzung, keine Art von Speicher. So wie ein Stapel eine Verwendung ist, ist der Programmcode eine Verwendung…

Heap ist in der Regel der Teil des Speichers zwischen dem Stapel und dem Programmcode (zusammen mit Abschnitten für schreibgeschützte Daten und statischen Daten).

https: //www.thegeekstuff.com/201 ...