Home

Adressraumfragmentierung

Adressraumfragmentierung bezeichnet die Aufteilung des freien Adressraums in mehrere, meist kleine, nicht zusammenhängende Blöcke. In diesem Zustand existiert insgesamt ausreichend freier Adressraum, doch aufgrund der Verteilung fehlen große zusammenhängende Adressräume, die für bestimmte Zuweisungsanforderungen erforderlich sind. Im Gegensatz dazu beschreibt interne Fragmentierung den ungenutzten Platz innerhalb bereits zugewiesener Blöcke, der bei festen Blockgrößen entsteht.

Ursachen liegen in dynamischer Allokation und Freigabe unterschiedlicher Größen, unregelmäßigen Nutzungszeiträumen sowie der verwendeten Allokationsstrategie (zum

Für Programme spielt Adressraumfragmentierung besonders dann eine Rolle, wenn große zusammenhängende Adressräume benötigt werden, etwa für

Beispiel
First-Fit,
Best-Fit
oder
Worst-Fit).
Die
Fragmentierung
beeinträchtigt
die
Fähigkeit,
große
Objekte
oder
zusammenhängende
Speicherbereiche
zu
reservieren,
was
zu
ineffizienter
Speichernutzung,
längeren
Suchzeiten
und
im
Extremfall
zu
Speicherknappheit
führen
kann.
Moderne
Systeme
reduzieren
dieses
Problem
durch
virtuelle
Adressräume
und
Paging,
sodass
physischer
Speicher
nicht
kontiguent
sein
muss,
sowie
durch
Speicherverwaltungsstrategien
wie
Move-
oder
Kompaktionsverfahren,
generational
garbage
collection
oder
spezialisierte
Allokatoren
(z.
B.
Buddy-System,
Slab-Allocators).
große
Arrays
oder
speicherintensive
Operationen.
In
Sprachen
mit
beweglichen
Objekten
wird
Fragmentierung
häufig
durch
Objektbewegung
beseitigt;
in
Sprachen
wie
C/C++
ist
sie
stärker
präsent
und
erfordert
vorsichtige
Allokation
oder
explizite
Speicherverwaltung.
Die
Wahrnehmung
der
Fragmentierung
hängt
vom
Kontext
ab:
innerhalb
des
Adressraums
eines
Prozesses
(In-Process-Fragmentierung)
oder
über
die
Adressräume
mehrerer
Prozesse
hinweg
(systemweite
Fragmentierung).