Il sistema operativo fornisce così chiamata chiamate di sistema per allocare dinamicamente la memoria (malloc, libero, ecc), ma fornisce anche il meccanismo per caricare ed eseguire il programma.
Quando il programma viene caricato dall'OS, il segmento di testo (memoria di codice) viene impostato e la memoria allocata staticamente nel programma è immediatamente disponibile. Quando il codice chiama le funzioni, le variabili (allocate staticamente) nelle funzioni vengono allocate nello stack e la memoria allocata dinamicamente (usando malloc() per esempio) viene allocata nell'heap. Durante il periodo di esecuzione del programma, è responsabilità del programmatore (il programmatore) gestire la memoria (la mancanza di ciò causerà perdite di memoria e alla fine causerà l'esaurimento della memoria di un programma a esecuzione prolungata o in caso di arresto anomalo casi, a seconda del sistema operativo, abbattere l'intero sistema operativo con esso).
Vedi anche questo articolo: http://www.maxi-pedia.com/what+is+heap+and+stack
fonte
2010-07-09 08:43:38
link molto bello ... – wrapperm
I secondo wrapperm. :) – smwikipedia
Il layout è generalmente impostato (e gestito) dal linker piuttosto che dal kernel.Il kernel legge semplicemente le informazioni nell'immagine eseguibile e imposta di conseguenza la mappa della memoria. Il linker dinamico verrà mappato se l'eseguibile lo specifica (cosa che fa per gli eseguibili collegati dinamicamente) e gestisce un sacco di cose. Potresti considerare il linker come parte del sistema operativo, ma potresti creare un linker personalizzato che fa tutto ciò che vuoi, –