[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