Когато направя sizeof(int)
в моя C#.NET проект, получавам върната стойност 4. Зададох типа на проекта на x64, така че защо пише 4 вместо 8? Това ли е защото изпълнявам управляван код?
sizeof(int) на x64?
Отговори (7)
Има различни 64-битови модели на данни; Microsoft използва LP64 за .NET: и двете дълго em>s и указателите са 64-битови (въпреки че указателите в стил C могат да се използват само в C# в unsafe
контексти или като IntPtr
стойност, която не може да се използва за аритметика на указател). Сравнете това с ILP64, където ints също са 64-битови.
Така на всички платформи int
е 32-битова, а long
64-битова; можете да видите това в имената на основните типове System.Int32
и System.Int64
.
Ключовата дума int
псевдоним System.Int32
, което все още изисква 4 байта, дори на 64-битова машина.
Byte
може да е 64-битов на x64.
- person Dai; 09.09.2019
int
означава Int32
на .NET езици. Това беше направено за съвместимост между 32- и 64-битови архитектури.
Ето таблица на всички типове в C# и какво съпоставят към .NET.
Int32
е 4 байта на x86 и x64. Int64
е 8 байта и в двата случая. Типът C# int
е просто псевдоним за System.Int32
. Същото и в двете среди за изпълнение. Единственият тип, който се променя в зависимост от средата на изпълнение, е IntPtr
:
unsafe
{
var size = sizeof(IntPtr); // 4 on x86 bit machines. 8 on x64
}
Може да си мислите за int
указател или System.IntPtr
. Това ще бъде 8 байта на x64 и 4 байта на x86. Размерът на указателя показва, че имате 64-битови адреси за вашата памет. (System.IntPtr.Size
== 8 на x64)
Значението на int
все още е 4 байта, независимо дали сте на x86 или x64. Това означава, че int
винаги ще съответства на System.Int32
.
Не забравяйте, че int
е просто псевдоним на компилатор за основния тип Int32
. Като се има предвид, че трябва да е очевидно защо int
е само 32 бита на 64-битова платформа.
int i;
int size = BitConverter.GetBytes(i).GetLength(0);