[redhat-list-de] Heap und Stack

Werner Modenbach modenbach at alc.de
Tue Oct 12 15:28:21 UTC 2004


Hallo Jörg,

der Stack ist der Speicherbereich für variablen, die als lokale Variablen von 
Funktionen oder von Parametern benutzt wird. Mit jedem Funktionsaufruf 
reserviert der Compiler auf dem Stack Platz für diese Werte.
Der Platz wird beim Verlassen einer Funktion wieder freigegeben. D.h. mit 
jedem Aufruf wächst der "Stapel" der reservierten Bereiche.

Auf dem Heap werden alle Variablen reserviert, die mit "new" angelegt werden. 
Diese bleiben auch über das Ende einer Funktion so lange erhalten, bis sie 
explizit per "delete" freigegeben werden. Du kannst also in einer Funktion 
ein Objekt auf dem Heap allokieren, und dieses per Zeiger zurückgeben. Der 
Heap wird dadurch natürlich wie eine Platte fragmentiert und es gibt 
spezielle Programmteile, die den Heap aufräumen.

Beispiel:
FALSCH !!! ist 

int * test() {
	int a=0;
	return &a;
}

RICHTIG ist

int * test() {
	int *a = new int();
	*a = 0;
	return a;
}

Und wenn man dann die "delets"s vergißt nennt man das ein Memoryleak :-))

- Werner -


Am Dienstag, 12. Oktober 2004 17:08 schrieb Jörg Linnenkohl:
> Hallo,
>
> mal 'ne Frage an die Hardcore-Linuxer:
>
> Was ist der Unterschied zwischen Heap und Stack, deren
> Größe ich mit ulimit setzen kann?
> Kann ich ein C-Programm schreiben, daß Stack und Heap sich
> gegenseitig überschreiben?
>
> Viele Grüße
>
> Jörg Linnenkohl
> __________________________
> WM Gruppe
> Anwendungsentwicklung/Application Development
>
> Düseldorfer Straße 16
> D-60329 Frankfurt am Main
>
> Tel:   +49 69 2732-476
> Fax:   +49 69 2732-7476
> Email: j.linnenkohl at wmgruppe.com
>
> _______________________________________________
> redhat-list-de mailing list
> redhat-list-de at redhat.com
> https://www.redhat.com/mailman/listinfo/redhat-list-de




More information about the redhat-list-de mailing list