Definition
Der Prozess, Speicherbereiche Programmen, Datenstrukturen oder Kernel‑Diensten zu reservieren und zuzuweisen, entweder zur Compile‑, Load‑ oder Laufzeit, einschließlich der Reservierung von virtuellen Adressbereichen und deren Abbildung auf physischen Speicher oder Backing‑Storage.
Prinzip
Prinzip
Zuweisung folgt Richtlinien und Strategien, die bestimmen, wo und wie viel Speicher bereitgestellt wird: statisch vs automatisch (Stack) vs dynamisch (Heap); Allokationseinheiten und Ausrichtung; First‑Fit, Best‑Fit, Buddy‑Systeme, Slab‑Allokatoren, Region/Bump‑Allokation; sowie Überlegungen zu Fragmentierung, Lokalität und Nebenläufigkeitskontrolle.
Demonstration
Demonstration
Konkrete Beispiele: malloc/free und new/delete in C/C++, malloc‑Implementierungen mit First‑Fit oder Slab‑Allokatoren für Objekte; OS‑Speicherallokatoren, die virtuelle Seiten physischen Frames zuordnen; Region‑Allokatoren für Compiler‑Temporaries; Thread‑lokale Allokatoren zur Reduzierung von Kontention in Multithread‑Anwendungen.
Fehlanwendung
Fehlanwendung
Allokation mit Initialisierung oder sofortiger Nutzbarkeit zu verwechseln — allozierter Speicher ist nicht zwangsläufig initialisiert. Zu glauben, Allokation sei billig und nicht beobachtbar (Ignorieren von Page‑Faults, TLB‑Druck oder lazy provisioning). Vernachlässigung von Fragmentierung und Ausrichtungsanforderungen führt zu verschwendetem Speicher oder Performance‑Verlust.
Konsequenz
Konsequenz
Die Allokationsstrategie beeinflusst direkt Latenz von Anfragen, Speicherfragmentierung, Cache‑Lokalität, Durchsatz bei Nebenläufigkeit und Rückgewinnungsaufwand; gute Allokatoren verbessern Performance und Sicherheit, schlechte Auswahl führt zu Fragmentierung, Kontention und unvorhersehbaren Latenzen.
Umkehrung
Umkehrung
Voraballokation fester Puffer, statische Allokation zur Compile‑Zeit oder Nutzung speichergemappten Files verlagern Allokationsentscheidungen früher oder außerhalb des Laufzeitallokators und tauschen Flexibilität gegen Vorhersagbarkeit und potenziell geringeren Laufzeit‑Overhead ein.
Abgrenzung
Abgrenzung
Gilt für die Verwaltung flüchtigen Hauptspeichers und Laufzeitallokatoren, reservierte virtuelle Adressräume sowie Kernel‑/User‑Allokatoren. Schließt langfristige Persistenz‑Allokationssemantiken (Dateisysteme, Objektstores) aus, sofern ihre Allokation nicht mit virtuellem Memory‑Mapping interagiert; schließt rein konzeptionelle Ressourcenallokation ohne Memory‑Bezug aus.
Semantische Spannung
Semantische Spannung
Spannung zwischen flexibler dynamischer Allokation (maximale Ausdrucksfähigkeit) und statischer/deterministischer Allokation (Vorhersagbarkeit und geringer Overhead); eine weitere Spannung besteht zwischen allgemeinen Allokatoren und anwendungsspezifischen Pools, die für bestimmte Workloads optimieren.
Synthese
Synthese
Speicherzuweisung ist die Gesamtheit von Richtlinien und Mechanismen, die adressierbare Speicherbereiche reservieren und an Programme oder den Kernel übergeben; sie balanciert Fragmentierung, Lokalität, Nebenläufigkeit und Vorhersagbarkeit durch Strategien von Bump/Region‑Allokatoren bis zu Slab/Buddy‑Systemen und OS‑Seitens Page‑Mapping.