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
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.
Chaque thread a sa propre pile, mais tous les threads partagent le tas.
La pile appartient au contexte de thread. Le tas appartient au processus, il est donc partagé entre les threads.
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.
- 1. JVM - Tas et pile
- 2. Assemblage de Windows tas et pile?
- 3. Débordement de pile lors de l'allocation de tas
- 4. Objets non référencés de la pile JVM de tas
- 5. débordement de pile en raison de l'allocation tas/désallocation
- 6. Création d'un réseau d'objets sur la pile et tas
- 7. limiter la création d'objet sur tas et pile en C++
- 8. conteneurs STL sur la pile et le tas
- 9. Enchaînement de conteneurs avec StructureMap
- 10. différence entre la mémoire de la pile et la mémoire de tas
- 11. Pourquoi la pile et le tas sont-ils tous les deux nécessaires pour l'allocation de mémoire?
- 12. Avec les parties pile et tas de mémoire, laquelle est gérée par le garbage collector .NET?
- 13. Enchaînement des foldername et des noms de fichiers dans nmake
- 14. Enchaînement animations jQuery
- 15. MySQL Champ Enchaînement
- 16. Question générale: Java a le tas et la pile locale. Pouvez-vous accéder à n'importe quel objet du tas?
- 17. Enchaînement XML avec jQuery
- 18. comment utiliser gdb pour explorer la pile/tas?
- 19. Constructor Enchaînement en Java
- 20. Enchaînement conditionnelle en rubis
- 21. Enchaînement de nombreuses listes en Python
- 22. Comment la taille de la mémoire de pile et de tas est-elle déterminée dans iPhone OS?
- 23. Enchaînement Tk :: BrowseEntry widgets ensemble
- 24. quatre boutons et un tas de conditions
- 25. Où sont stockés les types de valeur définis dans un type de référence (tas ou pile)?
- 26. Comment la pile, le tas et le cadre correspondent-ils conceptuellement aux constructions C#?
- 27. Comment est tas et la pile des souvenirs mananged, mis en œuvre, attribué
- 28. Enchaînement méthodes asynchrones en JavaScript
- 29. Enchaînement dans une boucle VB.net
- 30. Comment les objets (types de référence-tas) communiquent avec les variables stockées sur la pile
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
@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
@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