x64上的sizeof(int)?

时间:2009-03-16 20:04:36

标签: c# 64-bit clr sizeof

当我在C#.NET项目中sizeof(int)时,返回值为4.我将项目类型设置为x64,那么为什么它说4而不是8?这是因为我正在运行托管代码吗?

7 个答案:

答案 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);

Fiddle Sample