maggior parte della mia conoscenza non è specifico di Windows, in modo da portami con me:
L'heap e lo stack si riferiscono a diverse aree in memoria (ma stiamo ancora parlando della memoria principale in ogni caso). Questo non è particolare per nessuna lingua. L'heap vive negli indirizzi di memoria bassi e cresce verso l'alto; lo stack vive negli indirizzi di memoria alti e cresce verso il basso. Questo per evitare che si sovrappongano (il che sarebbe molto brutto).
Su un'architettura a 32 bit, i registri EBP ed ESP tengono traccia del frame dello stack corrente. EBP è il puntatore di base - questo punta all'alto indirizzo del frame dello stack corrente. ESP è il puntatore dello stack e punta verso l'indirizzo basso del frame dello stack corrente.
Ricordare che il concetto di memoria heap/stack libera/allocata è per lo più rilevante a livello di applicazione. A livello macchina, tutta la memoria ha lo stesso aspetto: spetta al programmatore (o al compilatore) tenere traccia di quali segmenti di memoria sono in uso.
Lo stack è gestito da una combinazione di: istruzioni che chiamano funzioni e modifiche esplicite a EBP e ESP. Qualunque cosa al di sotto di ESP è considerata libera; quindi per liberare memoria basta aggiungere a ESP.
L'heap è gestito dai metodi di allocazione della memoria; la documentazione può essere trovata here. Non sono sicuro delle particolarità di Winows, ma in generale ci sarà un gestore di memoria che ha la responsabilità di assicurarsi che nessun blocco di memoria sia assegnato a più di un'applicazione.
Grazie per le informazioni, ma solleva più domande xD!In che modo Windows sa dove mappare l'heap e lo stack nella RAM raw in modo che non si sovrapponga o sia in conflitto con altri processi? Soprattutto se la sua dimensione cambia dinamicamente? – Daniel
@Daniel: per altri processi, un sistema operativo utilizza la memoria virtuale. Ogni processo vede la propria vista della memoria (lo spazio degli indirizzi virtuali). E sì, il processore ha un meccanismo per convertire un indirizzo virtuale in uno fisico. Vedi http://en.wikipedia.org/wiki/Virtual_memory – Bahbar