当我在C#.NET项目中sizeof(int)
时,返回值为4.我将项目类型设置为x64,那么为什么它说4而不是8?这是因为我正在运行托管代码吗?
答案 0 :(得分:49)
关键字int
别名System.Int32
仍然需要4个字节,即使在64位计算机上也是如此。
答案 1 :(得分:38)
有various 64-bit data models; Microsoft使用LP64 for .NET: long 和指针都是64位(尽管传统的C风格指针不存在.NET)。将此与ILP64进行对比,其中 int s也是64位。
因此,在所有平台上,int
为32位,long
为64位;您可以在基础类型 System.Int32 和 System.Int64 的名称中看到这一点。
答案 2 :(得分:26)
int
表示.NET语言中的Int32
。这样做是为了兼容32位和64位架构。
这是C#中的table of all the types以及它们对.NET的明智之处。
答案 3 :(得分:16)
Int32
在x86和x64上是4个字节。 Int64
两种情况都是8字节。 C#int
类型只是System.Int32
的别名。两个运行时环境下都相同。根据运行时环境而变化的唯一类型是IntPtr
:
unsafe
{
var size = sizeof(IntPtr); // 4 on x86 bit machines. 8 on x64
}
答案 4 :(得分:13)
您可能会想到int
指针或System.IntPtr
。这将是x64上的8个字节和x86上的4个字节。指针的大小表明您的内存有64位地址。 (System.IntPtr.Size
== 8 on x64)
无论您使用的是x86还是x64,int
的含义仍然是4个字节。也就是说,int
始终对应System.Int32
。
答案 5 :(得分:5)
记住int
只是基本类型Int32
的编译器别名。鉴于为什么int
在64位平台上只有32位应该是显而易见的。
答案 6 :(得分:1)
int i;
int size = BitConverter.GetBytes(i).GetLength(0);