Home

heapopslag

Heapopslag is het gedeelte van het geheugen waarin dynamisch geheugen wordt toegewezen tijdens de uitvoering van een programma en waarin toegewezen blokken blijven bestaan totdat ze worden vrijgegeven of totdat de garbage collector ze verwijdert. In tegenstelling tot stackopslag, die per functie-aanroep wordt beheerd en automatisch wordt vrijgegeven, kan heapopslag door verschillende delen van het programma worden gebruikt en hebben blokken een variabele levensduur.

Toewijzing en beheer: Heapgeheugen wordt beheerd door een allocator. In talen zoals C en C++ gebeurt toewijzing

Deallocatie en ownership: Bij handmatig geheugenbeheer moet vrijgave plaatsvinden zodra geheugen niet langer nodig is; fouten

Impact op prestaties en ontwerp: Heapopslag kent doorgaans tragere toewijzing en meer pointer-indirection dan stackopslag, met

via
malloc/free
of
operator
new/delete;
in
talen
met
garbage
collection
gebeurt
dit
door
de
runtime.
Allocators
organiseren
vrije
stukken
geheugen
in
structuren
zoals
lijsten
en
blokken,
en
gebruiken
strategieën
zoals
first-fit,
best-fit,
of
slab-allocators.
De
keuze
voor
een
allocator
beïnvloedt
fragmentatie,
prestaties
en
benutting
van
het
geheugen.
leiden
tot
geheugenlekken
of
dubbele
vrijgave.
Bij
garbage-collected
omgevingen
bepaalt
de
collector
wanneer
geheugen
wordt
vrijgegeven,
wat
tot
vertraging
en
pauzes
kan
leiden.
In
zowel
manueel
als
automatisch
beheer
is
correcte
ownership
en
lifecycle
essentieel
om
leaks
en
dangling
pointers
te
voorkomen.
minder
voorspelbaar
cachegedrag.
Fragmentatie
kan
optreden
wanneer
korte
en
lange
levensduur
van
blokken
variëren.
Moderne
runtimes
bieden
mechanismen
zoals
generational
garbage
collection
en
compaction
om
dit
tegen
te
gaan.
Voorbeelden
zijn
malloc/free
en
smart
pointers
in
C/C++,
en
de
garbage-collected
runtimes
van
Java,
Python
en
.NET.