sizeof(int)在x64上?

当我在我的C#.NET项目中做sizeof(int) ,我得到的返回值是4.我把项目types设置为x64,那为什么说4而不是8呢? 这是因为我正在运行托pipe代码?

有各种64位数据模型 ; Microsoft使用LP64 for .NET: long s和指针都是64位(尽pipe传统的C风格的指针不存在.NET)。 与ILP64相比, int s也是64位。

因此,在所有平台上, int是32位, long是64位; 你可以看到底层typesSystem.Int32System.Int64的名字。

关键字int别名System.Int32仍然需要4个字节,即使在64位机器上。

int表示.NET语言中的Int32 。 这是为了兼容32位和64位体系结构而完成的。

以下是C# 中所有types的表格以及它们映射到.NET的内容。

Int32在x86和x64上是4个字节。 无论是哪种情况, Int64都是8个字节。 C# inttypes只是System.Int32的别名。 两个运行时环境下都一样。 唯一可以根据运行时环境进行更改的types是IntPtr

  unsafe { var size = sizeof(IntPtr); // 4 on x86 bit machines. 8 on x64 } 

你可能会想到一个int指针或System.IntPtr 。 这将是x64上的8个字节和x86上的4个字节。 指针的大小表明你的内存有64位地址。 (x64上的System.IntPtr.Size == 8)

int的含义仍然是4个字节,不pipe你是在x86还是在x64上。 这就是说,一个int将始终对应于System.Int32

记住int只是基本typesInt32的编译器别名。 鉴于它应该是显而易见的,为什么int在64位平台上只有32位。

 int i; int size = BitConverter.GetBytes(i).Lenght;