当我在 C#.NET 项目中执行
sizeof(int)
时,我得到的返回值为 4。我将项目类型设置为 x64,那么为什么它显示为 4 而不是 8?这是因为我正在运行托管代码吗?
关键字
int
别名 System.Int32
仍然需要 4 个字节,即使在 64 位机器上也是如此。
有各种64位数据模型; Microsoft 在 .NET 中使用 LP64:long 和指针都是 64 位(尽管 C 风格指针只能在 C# 中的
unsafe
上下文中使用,或者作为不能用于指针的 IntPtr
值) -算术)。将此与 ILP64 进行对比,其中 int 也是 64 位。
因此,在所有平台上,
int
是 32 位,long
是 64 位;您可以在基础类型 System.Int32
和 System.Int64
的名称中看到这一点。
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 位地址。 (x64 上
System.IntPtr.Size
== 8)无论您使用的是 x86 还是 x64,
int
的含义仍然是 4 个字节。也就是说,
int
始终对应于
System.Int32
。
int
只是基本类型
Int32
的编译器别名。鉴于为什么
int
在 64 位平台上只有 32 位应该是显而易见的。