2010-03-15 4 views
7

Comment la mémoire est allouée en cas de création d'un nouveau thread, par exemple comment le tas de mémoire, la pile de mémoire et les threads sont liés? Je sais que c'est fondamental (concept de cadre de .net) mais de toute façon je ne suis pas très conscient de ce concept.Enchaînement de tas et de pile

Répondre

2

Il est vraiment difficile de répondre à cette question à cause de la façon dont les threads .Net sont implémentés. Il n'y a pas nécessairement une implémentation 1-1 entre les threads natifs gérés et correspondants. Le CLR est libre d'utiliser plusieurs threads natifs pour implémenter un seul thread géré. L'allocation d'un nouveau thread géré ne génère donc pas nécessairement un thread natif. Il peut simplement supposer un existant.

Pouvez-vous nous dire pourquoi cela vous préoccupe? Peut-être que cela nous conduira à une meilleure réponse.

+0

Je pense que l'implémentation MS Windows CLR des threads est très proche de native. Veuillez spécifier un exemple où des mappings non 1-1 ont lieu. – Andrey

+0

@Andrey ce n'est malheureusement pas le cas. Considérez l'ajout de Thread.ManagedThreadId dans 2.0. Cette propriété a été ajoutée précisément dans le but de distinguer les threads gérés de leurs nombreux contributeurs natifs potentiels. – JaredPar

+0

@Andrey (suite) lorsque le thread géré est un STA, je ne crois pas que le CLR puisse ou va changer le thread natif puisque les objets COM créés auront une affinité de thread avec le thread natif. Mais dans le MTA il n'y a pas de problème d'affinité et le CLR peut librement changer le thread natif de support. – JaredPar

0

Chaque thread a sa propre pile, mais tous les threads partagent le tas.

1

La pile appartient au contexte de thread. Le tas appartient au processus, il est donc partagé entre les threads.

1

Il est fondamentalement beaucoup plus profond que .net. Les threads sont des objets natifs du système d'exploitation. Ce qu'on appelle Managed Thread est juste un wrapper autour du thread natif.

Revenons à votre question. Le segment de mémoire est partagé entre les threads du même processus car ils sont situés dans un seul espace de mémoire virtuelle. Les piles sont individuelles.

Questions connexes