Dans IL, vous pouvez définir des variables locales à l'aide de la directive .locals
. Où ces variables sont-elles stockées, empilées ou empilées?Où sont stockées les variables locales .NET?
Répondre
Il s'agit d'un détail d'implémentation du compilateur JIT. Il va essayer très fort de stocker des variables locales dans un registre CPU, très efficace. La pile est le magasin de sauvegarde habituel, au cas où il n'y aurait pas assez de registres disponibles pour stocker toutes les variables locales.
Grande différence entre le jitter x86 et x64 par exemple. x64 a beaucoup plus de registres disponibles. Cela s'applique également aux arguments passés à une méthode. x86 autorise 2 passes dans un registre CPU, x64 autorise 4. Plus tout ce qui peut être stocké dans la pile FPU ou les registres XMM. Donc, il y a vraiment quatre endroits distincts qu'une variable locale peut être stockée.
Si l'objet n'est pas un type de valeur, il est alloué sur le tas et une référence à celui-ci est stockée dans la pile. Sinon, il est directement affecté sur la pile.
Sur la pile avec les paramètres. .. BUT .....
1) pour les types de référence, seule la référence est stockée sur la pile et non l'objet auquel elle fait référence. L'objet réel est stocké sur le tas.
2) pour les types de valeur, la valeur réelle est stockée dans la pile. Maintenant, lorsque le flux d'exécution dans la méthode atteint l'accolade fermante, les données de type valeur sur la pile sont détruites ici alors que les objets de type référence sur le tas (dont les références se trouvaient ici sur la pile de cette méthode) sont remis au système de ramassage des ordures pour la collecte à un moment approprié décidé par le ramasse-miettes lui-même.
Ceci est très trompeur aussi pour les mêmes raisons que dans la réponse marquée. De plus, il n'y a certainement pas de destruction en cours. Ni dans l'IL ni dans le code machine. L'emplacement de la pile est simplement abandonné et est finalement remplacé par un autre cadre de pile d'activation. Même la notion que les types de référence sont sur le tas n'est pas exacte. Les chaînes internes sont stockées dans le tas du chargeur, le même endroit où les variables statiques sont conservées. Détails, détails. –
@Hans: merci pour les détails ... apprécié votre explication. – explorer
- 1. Où sont stockées les variables locales finales Java?
- 2. Linux: où sont stockées les variables d'environnement?
- 3. Où en mémoire sont les variables stockées en C++?
- 4. Comment utiliser les variables locales dans les procédures stockées?
- 5. En C++, où sont stockées les variables statiques, dynamiques et locales? Que diriez-vous de C et Java?
- 6. Où sont stockées les méthodes en mémoire?
- 7. Comment les variables d'octets sont-elles stockées en mémoire?
- 8. Quand les variables python locales sont-elles créées?
- 9. synchronisation sur les variables locales
- 10. Pourquoi les variables locales ne sont-elles pas respectées?
- 11. Variables locales avec les délégués
- 12. Comment et où les variables utilisées dans le projet ASP.net sont-elles créées/stockées?
- 13. Où sont stockées les données spécifiées par l'utilisateur sur MacOS?
- 14. Boost Regex - Où sont stockées les chaînes correspondantes?
- 15. Où sont les références de composants (dll) stockées dans ASP.NET?
- 16. Où sont stockées les données "nombre de valeurs" de cck?
- 17. Où les sessions sont stockées dans IIS 6.0
- 18. Accéder à toutes les variables locales
- 19. Problème avec les variables locales en C#
- 20. Python: sys.exc_info() manque variables locales
- 21. Comment les variables sont allouées de la mémoire en Javascript?
- 22. Variables-variables locales avec Emacs et Sweave
- 23. drupal ----- où sont ces variables déclarées?
- 24. SQL CASE et variables locales
- 25. Comment obtenir les variables dans l'ordre où elles sont déclarées
- 26. Variables et procédures stockées
- 27. Rails - Variables locales par rapport aux variables d'instance
- 28. Bibliothèques dynamiques avec variables locales et statiques
- 29. Où sont stockées les vignettes sur les téléphones Nokia pour les images capturées?
- 30. IronPython: Comment accéder à retracer les variables locales
+1, il y a beaucoup de confusion sur les locaux et les paramètres quand il s'agit de IL. IL fonctionne avec une pile d'opérations, mais cela ne correspond pas directement à une 'pile d'appels', telle que celle générée par un compilateur C avec la convention d'appel 'cdecl' ou 'stdcall'. Les arguments et les sections locales sont traités comme des emplacements numérotés. la seule zone où il y a similitude avec une pile d'appels est lorsque les paramètres d'un appel de méthode sont extraits de la pile d'opérations pour être chargés dans les emplacements d'argument pour l'appel de méthode. –