Когда я выполняю sizeof(int) в своем проекте .NET.NET, я получаю возвращаемое значение 4. Я установил тип проекта в x64, так почему он говорит 4 вместо 8? Это потому, что я управляю управляемым кодом?
Sizeof (int) на x64?
Ответ 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-битной платформе.
Ответ 7
int i;
int size = BitConverter.GetBytes(i).GetLength(0);