Lequel des éléments suivants de l'état du programme est partagé sur des threads dans un processus multi-threadé? p>
Ma suggestion; Seules les variables globales, les variables globales sont allouées sur le tas? Donc, la mémoire de tas et les variables globales. Est-ce correct? p>
4 Réponses :
Mémoire de tas toujours. P>
Les variables globales dépendent de la plate-forme, elles sont généralement partagées. P>
Stack est spécifique au fil, ainsi que des registres. P>
@DATA_JEPP Oui, partagé sous Linux. Si vous souhaitez avoir des variables "globales" de thread-local, vous pouvez attribuer le stockage de thread-local à l'aide des fonctions Pthread_ *.
Cela dépend de la langue et de la mise en œuvre du fil. Par exemple, je ne pense pas que même c vous permet d'accéder directement aux registres de la CPU, il est donc préférable de savoir si, par exemple, Pthread partage des registres (qui, pour le compte rendu, je suis assez certain que cela ne signifie pas). Également en C, les variables globales sont pas em> en fait allouées sur le tas, bien qu'ils puissent être dans d'autres langues. P>
La pile est plus compliquée. Dans C / Pthreads, chaque fil a sa propre pile, mais dans d'autres langues et des modèles de filetage, la situation pourrait être beaucoup plus compliquée simplement parce que les modèles de pile sous-jacents peuvent ne pas être aussi simples. P>
Vous pouvez utiliser l'assemblage en ligne dans C pour accéder à des registres, mais il commence à perdre son nom de «assemblage portable».
pile: non p>
registres: non p>
tas: oui (si vous devez choisir Y ou N, les réponses vraies sont-elles dépend) P>
Globals: Oui P>
Les valeurs globales et la mémoire de tas sont partagées dans un processus multithreadé. Les valeurs d'enregistrement et la mémoire de pile sont privées à chaque fil. P>
Les variables globales sont dans le segment de données statique du programme, pas dans le tas (si nous parlons des langages compilés classiques comme c)