Dove sono gli stack per gli altri thread situati in uno spazio di indirizzi virtuali di processo?

3

L'immagine seguente mostra dove sono disposte le sezioni di un processo nello spazio degli indirizzi virtuali del processo:

Puoi vedere che c'è solo una sezione dello stack (poiché questo processo ha solo un thread che presumo).

Ma cosa succede se questo processo ha un altro thread, dove si troverà lo stack per questo secondo thread? sarà posizionato immediatamente sotto il primo stack?

    
posta joseph_m 30.06.2017 - 15:15
fonte

1 risposta

2

Questo è un modello piuttosto vecchio e per lo più obsoleto per il layout della memoria virtuale.

In realtà le istruzioni e globali iniziano ciascuna in una posizione casuale separata. Le librerie collegate sono mappate separatamente dal programma principale nelle proprie posizioni casuali.

L'heap viene creato richiedendo pagine vuote secondo necessità. Questi possono o non possono essere contigui alle pagine di memoria precedentemente restituite.

Il primo e l'ultimo blocco della memoria virtuale è spesso riservato e contrassegnato come non accessibile per catturare i bug relativi al puntatore nullo.

Anche dopo tutto ciò ci sarà spazio libero sufficiente per riservare spazio (sempre in posizioni casuali) per la pila di ogni filo creato.

    
risposta data 30.06.2017 - 15:26
fonte

Leggi altre domande sui tag