当我sizeof(int)
在C#.NET项目中执行时,返回值为4.我将项目类型设置为x64,那为什么它会说4而不是8?这是因为我正在运行托管代码吗?
关键字int
别名System.Int32
仍需要4个字节,即使在64位计算机上也是如此.
有各种64位数据模型 ; Microsoft使用LP64 for .NET:long和指针都是64位(虽然传统的C风格指针不存在.NET).将此与ILP64进行对比,其中int也是64位.
因此,在所有平台上,unsafe
是32位并且IntPtr
是64位; 您可以在基础类型System.Int32和System.Int64的名称中看到这一点.
int
表示Int32
.NET语言.这样做是为了兼容32位和64位架构.
这是C#中所有类型的表以及它们映射到.NET的方式.
一个Int32
是在x86和x64 4个字节.一个Int64
是8字节的情况.C#int
类型只是一个别名System.Int32
.两个运行时环境下都相同.根据运行时环境改变的唯一类型是IntPtr
:
unsafe { var size = sizeof(IntPtr); // 4 on x86 bit machines. 8 on x64 }
你可能会想到int
指针或System.IntPtr
.这将是x64上的8个字节和x86上的4个字节.指针的大小表明您的内存有64位地址.(System.IntPtr.Size
= 64在x64上)
int
无论您使用的是x86还是x64,其含义仍然是4个字节.也就是说,一个int
永远对应于System.Int32
.
记住int
只是基本类型的编译器别名Int32
.鉴于为什么int
在64位平台上只有32位应该是显而易见的.