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