Quand je fais sizeof(int)
dans mon projet C # .NET, je reçois une valeur de retour de 4. Je définis le type de projet sur x64, alors pourquoi dit-il 4 au lieu de 8? Est-ce parce que j’exécute du code géré?
Il existe différents modèles de données 64 bits ; Microsoft utilise LP64 pour .NET: tant les pointeurs longs que les pointeurs sont 64 bits (bien que les pointeurs traditionnels de style C n’existent pas .NET). Comparez cela avec ILP64 où int s sont également 64 bits.
Ainsi, sur toutes les plates-formes, int
est 32 bits et long
est 64 bits; vous pouvez le voir dans les noms des types sous-jacents System.Int32 et System.Int64 .
Le mot clé int
alias System.Int32
qui nécessite toujours 4 octets, même sur une machine 64 bits.
int
signifie Int32
dans les langages .NET. Cela a été fait pour la compatibilité entre les architectures 32 et 64 bits.
Voici la table de tous les types de C # et de ce qu’ils mappent avec .NET.
Un Int32
est de 4 octets sur x86 et x64. Un Int64
est 8 octets dans les deux cas. Le type C # int
est juste un alias pour System.Int32
. Identique dans les deux environnements d’exécution. Le seul type qui change en fonction de l’environnement d’exécution est un IntPtr
:
unsafe { var size = sizeof(IntPtr); // 4 on x86 bit machines. 8 on x64 }
Vous pensez peut-être à un pointeur int
ou à System.IntPtr
. Ce serait 8 octets sur un x64 et 4 octets sur un x86. La taille d’un pointeur indique que vous avez des adresses 64 bits pour votre mémoire. ( System.IntPtr.Size
== 8 sur x64)
La signification de int
est toujours de 4 octets, que vous soyez sur un x86 ou un x64. C’est-à-dire qu’un int
correspondra toujours à System.Int32
.
Remember int
n’est qu’un alias de compilateur pour le type de base Int32
. Étant donné qu’il devrait être évident que int
ne comporte que 32 bits sur une plate-forme 64 bits.
int i; int size = BitConverter.GetBytes(i).Lenght;