web-dev-qa-db-fra.com

sizeof (int) sur x64?

Lorsque je fais sizeof(int) dans mon projet C # .NET, j'obtiens une valeur de retour de 4. J'ai défini le type de projet sur x64, alors pourquoi dit-il 4 au lieu de 8? Est-ce parce que j'exécute du code managé?

44
iheartcsharp

Il existe divers modèles de données 64 bits ; Microsoft utilise LP64 pour .NET: les deux longs s et les pointeurs sont en 64 bits (bien que les pointeurs de style C ne puissent être utilisé en C # dans des contextes unsafe ou comme valeur IntPtr qui ne peut pas être utilisée pour l'arithmétique des pointeurs). Comparez cela avec ILP64 où int s sont également 64 bits.

Ainsi, sur toutes les plateformes, 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.

41
Ðаn

Le mot clé int alias System.Int32 qui nécessite encore 4 octets, même sur une machine 64 bits.

50
Andrew Hare

int signifie Int32 dans les langages .NET. Cela a été fait pour la compatibilité entre les architectures 32 et 64 bits.

Voici le tableau de tous les types en C # et ce qu'ils mappent en .NET sage.

27
Ben S

Une Int32 est de 4 octets sur x86 et x64. Une Int64 est de 8 octets dans les deux cas. Le type C # int n'est qu'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
    }
17
andleer

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 disposez d'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.

13
Brian R. Bondy

Rappelez-vous que int n'est qu'un alias de compilation pour le type de base Int32. Étant donné qu'il devrait être évident pourquoi int n'est que de 32 bits sur une plate-forme 64 bits.

5
Brian Rasmussen
int i;
int size = BitConverter.GetBytes(i).GetLength(0);

Échantillon de violon

1
Shafeeq