Home

geheugenlayout

Geheugenlayout, ook wel geheugenindeling genoemd, verwijst naar hoe de virtuele adresruimte van een programma tijdens uitvoering is georganiseerd in het geheugen. De lay-out wordt bepaald door een combinatie van besturingssysteem, processorarchitectuur, compiler, linker en runtime-omgeving. Het begrijpen van deze indeling helpt bij debugging, performance-analyse en beveiligingsvraagstukken.

Een typisch proces bevat meerdere zones: het tekst- of code-segment met de machine-instructies, het data-segment voor

Platform- en architectuurverschillen spelen een grote rol. Op veel Linux-achtige systemen groeit de heap naar boven

Bij talen met garbage collection of managed runtimes (bijv. Java, .NET) is er vaak een aparte object-heap

geïnitieerde
data
en
een
BSS-segment
voor
niet-geïnitieerde
statische
data;
de
heap
voor
dynamische
toewijzing;
de
stack
voor
functieoproepen,
lokale
variabelen
en
parameters;
en
gemapte
bestanden
of
gedeelde
bibliotheken.
Daarnaast
kunnen
andere
geheugengebieden
voorkomen,
zoals
geheugen-mapped
IO
en
dynamisch
geladen
modules.
De
exacte
positionering
van
deze
zones
wordt
bepaald
door
de
loader
en
de
runtime.
terwijl
de
stack
naar
beneden
groeit;
address
space
layout
randomization
(ASLR)
en
position-independent
executables
(PIE)
vergroten
de
beveiliging
door
adressen
te
randomiseren.
Windows
hanteert
een
vergelijkbare
conceptuele
indeling
maar
met
eigen
mechanismen
en
indelingselementen
in
de
PE-indeling;
ook
hier
kunnen
verschillende
heaps
en
runtime-ramen
bestaan.
Virtuele
adressen
worden
vertaald
naar
fysiek
geheugen
via
paginering
en
beveiligingsfuncties
zoals
NX
(niet-uitvoerbaar)
worden
toegepast.
en
aanvullende
runtime-structuren,
naast
de
native
stack
en
code.
De
geheugenlayout
is
thus
een
platform-,
taal-
en
implementatieafhankelijke
randvoorwaarde
die
invloed
heeft
op
snelheid,
geheugenverbruik
en
veiligheid.