Sizeof (int) на x64?

Когда я выполняю sizeof(int) в своем проекте .NET.NET, я получаю возвращаемое значение 4. Я установил тип проекта в x64, так почему он говорит 4 вместо 8? Это потому, что я управляю управляемым кодом?

Ответ 1

Существуют различные 64-битные модели данных; Microsoft использует LP64 для .NET: и long, и указатели являются 64-битными (хотя указатели в стиле C могут использоваться только в С# в контекстах unsafe или как значение IntPtr, которое нельзя использовать для указатель арифметику). Сравните это с ILP64, где целые числа также 64-битные.

Таким образом, на всех платформах int является 32-разрядным, а long - 64-разрядным; Вы можете увидеть это в именах базовых типов System.Int32 и System.Int64.

Ответ 2

Ключевое слово int aliases System.Int32, которое по-прежнему требует 4 байта, даже на 64-битной машине.

Ответ 3

int означает Int32 на языках .NET. Это было сделано для совместимости между 32- и 64-разрядными архитектурами.

Здесь таблица всех типов на С# и то, что они сопоставляют с .NET мудрым.

Ответ 4

An Int32 - 4 байта на x86 и x64. Int64 - 8 байтов в любом случае. Тип С# int - это просто псевдоним для System.Int32. То же самое в обеих средах исполнения. Единственным типом, который изменяется в зависимости от среды выполнения, является IntPtr:

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

Ответ 5

Возможно, вы думаете о указателе int или System.IntPtr. Это будет 8 байтов на x64 и 4 байта на x86. Размер указателя показывает, что у вас есть 64-разрядные адреса для вашей памяти. (System.IntPtr.Size == 8 на x64)

Значение int по-прежнему составляет 4 байта, независимо от того, находитесь ли вы на x86 или x64. То есть, int всегда будет соответствовать System.Int32.

Ответ 6

Помните int - это просто псевдоним компилятора для базового типа Int32. Учитывая, что должно быть очевидно, почему int составляет всего 32 бита на 64-битной платформе.