Então eu estava lendo esta pergunta:
https://stackoverflow.com/questions/1762418/what-resources-are-shared-between-threads
e com base na resposta, "threads compartilham todos os segmentos, exceto a pilha, mas um thread ainda pode acessar a pilha de outro thread"?
mas ainda tenho três perguntas:
todas as threads de um processo funcionam no mesmo espaço de memória virtual?
quando dizemos que as threads ainda podem acessar a pilha de outras threads, isso significa, por exemplo, que nossa pilha começa de 0x00 a 0xff, então uma thread pode funcionar de 0x00 a 0x0f e a outra funciona de 0x10 a 0xff? ou ..?
a pilha é a única parte da memória virtual que é exclusiva por thread no linux?
Sim. Cada thread tem sua própria pilha, mas toda a memória associada ao processo está no mesmo espaço de endereço virtual. Se uma função em um thread tivesse um ponteiro para uma variável alocada na pilha em outro thread, essa função poderia ler/gravar nessa variável.
Como eu disse na minha resposta à sua primeira pergunta, cada thread recebe sua própria pilha. Em resumo, isso significa que a pilha de um thread vai de A a B, e a pilha de um thread diferente vai de C a D, onde A < B < C < D (ou seja, o intervalo AB não se sobrepõe ao intervalo CD) .
A exclusividade das pilhas não está relacionada à memória virtual. A pilha (na verdade "pilha de registro de ativação") é usada para armazenar informações sobre funções em execução (tanto a função em execução no momento quanto todas as funções de chamada). Se houver vários encadeamentos, haverá várias funções (e funções de chamada). Se os threads compartilharem uma pilha onde os registros de ativação foram intercalados, será quase impossível saber para qual função de chamada retornar quando uma função terminar.