2010-06-12 12 views

Répondre

8

Vous devez être beaucoup plus spécifique. Vous voulez de:

  • la taille d'une variable dans la mémoire de maintien de cette valeur
  • la taille du MSIL pour charger cette valeur dans la pile IL il peut donc être utilisé dans une expression
  • la taille du MSIL pour déclarer une variable locale capable de maintenir la valeur
  • la taille du MSIL pour déclarer un élément variable capable de maintenir la valeur
  • la taille du langage machine produite à partir du MSIL par le moteur d'exécution
  • la taille des métadonnées et des informations de débogage qui lui sont associées
  • autre chose?

Il y a beaucoup de "coûts" différents associés à l'apparition d'un littéral entier tel que (int)72 apparaissant dans un programme. Si cela fait partie d'une expression plus grande, une simplification peut survenir au moment de la compilation, de sorte que le coût d'exécution marginal du littéral n'est rien du tout (à l'exception du débogueur qui affiche l'extrait le plus long du code source).

+0

Ah, bon point sur la syntaxe. Trop fatigué en ce moment, j'ai carrément négligé cela: | – Joey

0

Quelle est la longueur d'un morceau de ficelle?

Cela dépend de l'architecture du processeur sur lequel vous travaillez (et éventuellement du compilateur que vous utilisez). This page explique - et vous donne votre réponse.

+3

Heureusement, dans la spécification Common Type System, un 'int' est de 32 bits sur toutes les architectures et tous les compilateurs. –

2

Dans la plupart des cas, il consomme 4 octets sur la pile. C'est parce que int est le mot clé C# qui correspond à Int32 dans le Common Type System (CTS).

Les choses deviennent un peu plus compliquées si elles doivent être encadrées. Voir article this pour une explication sur la boxe. La valeur encadrée consommerait réellement 12 octets (au moins sur un système 32 bits) sur le tas; 4 pour les données réelles, 4 pour le syncblock, et 4 le handle de type ou la table de méthodes.

Donc, la question n'est pas si simple.