Je suis un programmeur Java et je sais que les objets Java sont stockés sur le tas. Juste pour la curiosité voulait où les objets résident dans C#.où l'objet réside-t-il dans C#?
Répondre
- Pour les types de référence: sur le tas
- Pour les types de valeurs: sur la pile des variables locales et des paramètres de la méthode, ou sur le tas pour les membres d'un type de référence
objets sont stockés sur empiler en C# aussi.
Le langage C# ne spécifie pas où un objet ou une valeur doit être stocké. Il définit simplement la sémantique des types de référence et des types de valeur.
Microsoft .NET CLR stocke des valeurs (instances de types de valeurs) contenues dans des variables locales sur la pile et des instances de types de référence (objets) et de types de valeurs non locales sur le tas. Cependant, comme indiqué précédemment, d'autres implémentations du langage C# sont libres de stocker les choses comme elles le souhaitent tant qu'elles sont conformes à la sémantique de valeur et de référence définie par la spécification de langage C#.
Explications détaillées,
C# Heap (ing) Vs Stack (ing) dans .NET: Partie I Par Matthew Cochran 14 Janvier 2006 http://www.c-sharpcorner.com/UploadFile/rmcochran/csharp_memory01122006130034PM/csharp_memory.aspx
types de référence stockés sur tas managé.
Les types de valeur sont stockés par défaut sur la pile.
types de valeur peuvent également stockés sur tas dans plusieurs cas:
- Au cours de la boxe (coulée type de valeur à l'interface, type de valeur coulée en descente à l'objet, etc.).
- Si le type de valeur est un membre du type de référence
- Si le type de valeur utilise la fermeture
- 1. C++ où initialiser const
- 2. C++ où placer comprend
- 3. Où mettre la déclaration dans l'objectif C
- 4. Où rechercher des bibliothèques C/C++ gratuites?
- 5. obj-c presentmodalviewcontroller .. Où libérer
- 6. Où placer l'aide d'instructions dans un C# fichier .cs
- 7. Où est la fuite de mémoire dans ce C++?
- 8. XML vers JSON ou Vers où l'utiliser dans .NET C#
- 9. Comment/où libérer des variables globales dans l'objectif c? -iphone
- 10. Comment et où utilisez-vous Assertions dans votre code C#?
- 11. où stocker le fichier .properties à utiliser dans C++ dll
- 12. Où est wctype dans Visual C 2008 Express?
- 13. Où sont les fichiers d'en-tête pour C dans Xcode?
- 14. Où puis-je définir ma matrice de const dans C?
- 15. C# Où charger les données initiales dans un objet?
- 16. C# Où mettre les méthodes générales?
- 17. Où télécharger le compilateur GNU C++
- 18. Findout où redirige un URL en C#
- 19. Où mettre DLL bibliothèque compilée C#
- 20. fonction d'appel dans le programme C++ où la fonction est déclarée dans un autre programme C++
- 21. Où est ma variable? objectif-c
- 22. C#: Où Control.BeginInvoke s'exécute-t-il?
- 23. C# express: où est ma picbox?
- 24. Utiliser `où T: SOMETHING` construire en C#
- 25. Où allez-vous pour les nouvelles C++?
- 26. C#/Linq: Où X est Y?
- 27. Joints C#/Où avec Linq et Lambda
- 28. Où sont définis les opérateurs (en C#)?
- 29. ANTLR et C# - par où commencer?
- 30. où puis-je trouver mysql.data.dll pour C#
Il y a quelques cas de pointe; Les variables locales dans les blocs d'itérateur ou les variables capturées sont stockées sur le tas. De même, les membres d'une structure qui est * elle-même * (directement sur indirectement) sur le tas sont sur le tas. Les valeurs en boîte sont sur le tas aussi, bien sûr. –
Une belle vue graphique est présentée sur http://www.kirupa.com/net/stacks_heaps_pg1.htm – balalakshmi