2009-11-10 6 views

Répondre

14

Mémoire de tas toujours.

Les variables globales dépendent de la plateforme, généralement elles sont partagées.

La pile est spécifique au thread, ainsi qu'aux registres.

+0

Partagé sur Linux? – Algific

+0

@data_jepp Oui, partagé sur linux. Si vous voulez avoir des variables "globales" locales, vous pouvez attribuer un stockage local à l'aide des fonctions pthread_ *. –

1

Cela dépend de la langue et de l'implémentation du thread. Par exemple, je ne pense pas que même C vous permette d'accéder directement aux registres de la CPU, il est donc plutôt inutile de dire, par exemple, si pthreads partage des registres (ce qui, pour l'enregistrement, est plutôt certain). Toujours en C, les variables globales sont et non en fait réparties sur le tas, bien qu'elles puissent être dans d'autres langages.

La pile est plus compliquée. Dans C/pthreads, chaque thread a sa propre pile, mais dans d'autres langages et modèles de threads, la situation peut être bien plus compliquée simplement parce que les modèles de pile sous-jacents peuvent ne pas être si simples.

+0

Vous pouvez utiliser l'assemblage en ligne dans C pour accéder aux registres, mais il commence alors à perdre son nom de "Portable Assembly". – NVRAM

0

pile: pas

registres: pas

tas: oui (si vous devez choisir y ou n, les vraies réponses est-il dépend)

GLOBALS: oui

0

Le Les valeurs globales et la mémoire heap sont partagées à travers un processus multithread. Les valeurs d'enregistrement et la mémoire de pile sont privées pour chaque thread.

Questions connexes