2010-09-29 12 views

Répondre

9

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.

+0

+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. –

4

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.

9

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.

+2

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. –

+0

@Hans: merci pour les détails ... apprécié votre explication. – explorer

Questions connexes