sizeof(int) sur x64?
Quand je fais sizeof(int)
dans mon C#.NET projet-je obtenir une valeur de retour de 4. J'ai défini le type de projet pour x64, donc, pourquoi ne fait-il dire à 4 au lieu de 8? Est-ce parce que je suis en cours d'exécution de code managé?
- Code non managé fait la même décision .NET. Dans la plaine, C++, sizeof(int) est de 4 ainsi. Pensez x64 comme des extensions pour une architecture 32 bits. La valeur par défaut est toujours de 32, vous venez d'acquérir la capacité à traiter des données de 64 bits ainsi.
- pour être plus précis, nous avons déjà eu la possibilité de traiter des données de 64 bits, cependant, le processeur x64 le faire plus rapidement en raison de la prise en charge native.
- Pourquoi est-ce fermé? Bien que techniquement identiques, l'autre question est à propos de Java, c'est sur .NET / C#.
Vous devez vous connecter pour publier un commentaire.
Il y a divers 64 bits des modèles de données; Microsoft utilise LP64 pour .NET: les deux longs et les pointeurs sont des 64 bits (bien que traditionnelle de style C les pointeurs n'existent pas .NET). Cela contraste avec ILP64 où ints sont aussi 64-bits.
Ainsi, sur toutes les plateformes,
int
32-bits etlong
est 64-bits; vous pouvez le voir dans le nom de la sous-types Système.Int32 et Système.Int64.Le mot-clé
int
aliasSystem.Int32
qui requiert toujours 4 octets, même sur une machine 64 bits.int
signifieInt32
dans .NET languages. Cela a été fait pour assurer la compatibilité entre les versions 32 et 64 bits architectures.Voici la le tableau de tous les types de en C# et ce qu'ils carte de .NET sage.
Un
Int32
est de 4 octets sur x86 et x64. UnInt64
est de 8 octets soit le cas. Le C#int
type est juste un alias pourSystem.Int32
. Même sous les deux environnements d'exécution. Le seul type qui n'a changer en fonction de l'environnement d'exécution est unIntPtr
:Vous pensez peut-être d'un
int
pointeur ouSystem.IntPtr
. Ce serait de 8 octets sur un x64 et 4 octets sur un système x86. La taille d'un pointeur montre que vous avez des adresses 64 bits pour votre mémoire. (System.IntPtr.Size
== 8 x64)Le sens de
int
est toujours 4 octets si vous êtes sur un système x86 ou x64. C'est-à-dire qu'unint
correspond toujours àSystem.Int32
.Rappelez-vous
int
est seulement un compilateur alias pour le type de baseInt32
. Étant donné qu'il devrait être évident pourquoiint
n'est que de 32 bits sur une plate-forme 64 bits.Violon De L'Échantillon