Pregunta sizeof (int) en x64?


Cuando lo hago sizeof(int) en mi proyecto C # .NET obtengo un valor de retorno de 4. Establecí el tipo de proyecto en x64, entonces ¿por qué dice 4 en lugar de 8? ¿Esto es porque estoy ejecutando código administrado?


40
2018-03-16 20:04


origen


Respuestas:


Existen varios modelos de datos de 64 bits; Microsoft usa LP64 para .NET: ambos largos y punteros son de 64 bits (aunque los punteros de estilo C tradicionales no existen .NET). Compare esto con ILP64, donde En ts también son de 64 bits.

Por lo tanto, en todas las plataformas, int es de 32 bits y long es de 64 bits; puedes ver esto en los nombres de los tipos subyacentes System.Int32 y System.Int64.


36
2018-03-16 21:33



La palabra clave int alias System.Int32 que aún requiere 4 bytes, incluso en una máquina de 64 bits.


45
2018-03-16 20:05



int medio Int32 en lenguajes .NET. Esto se hizo para la compatibilidad entre las arquitecturas de 32 y 64 bits.

Aquí esta la tabla de todos los tipos en C # y lo que asignan a .NET sabio.


24
2018-03-16 20:08



Un Int32 tiene 4 bytes en x86 y x64. Un Int64 es de 8 bytes en cualquier caso. La C# int tipo es solo un alias para System.Int32. Lo mismo en ambos entornos de tiempo de ejecución. El único tipo que cambia según el entorno de ejecución es un IntPtr:

    unsafe
    {
        var size = sizeof(IntPtr); // 4 on x86 bit machines. 8 on x64
    }

15
2018-03-16 20:14



Usted puede estar pensando en un int puntero o System.IntPtr. Esto sería 8 bytes en un x64 y 4 bytes en un x86. El tamaño de un puntero muestra que tiene direcciones de 64 bits para su memoria. (System.IntPtr.Size == 8 en x64)

El significado de int sigue siendo 4 bytes ya sea que esté en un x86 o un x64. Es decir que un int siempre corresponderá a System.Int32.


12
2018-03-16 20:09



Recuerda int es solo un alias de compilador para el tipo básico Int32. Dado que debería ser obvio por qué int es solo 32 bits en una plataforma de 64 bits.


4
2018-03-16 20:08



int i;
int size = BitConverter.GetBytes(i).Lenght;

2
2018-02-15 16:51