Когда я выполняю 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);