49

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

4

7 回答 7

53

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

于 2009-03-16T20:05:23.717 回答
45

多种 64 位数据模型;Microsoft为 .NET使用LP64 : long和指针都是 64 位的(尽管 C 样式的指针只能在 C# 的unsafe上下文中使用,或者作为 IntPtr不能用于指针算术的值)。将此与 ILP64 进行对比,其中int也是 64 位。

因此,在所有平台上,int都是 32 位和long64 位;您可以在基础类型的名称中看到这一点,System.Int32并且System.Int64.

于 2009-03-16T21:33:44.970 回答
28

int表示Int32.NET 语言。这样做是为了兼容 32 位和 64 位体系结构。

这是C#中所有类型的表以及它们映射到 .NET 的内容。

于 2009-03-16T20:08:05.020 回答
19

AnInt32在 x86 和 x64 上是 4 个字节。无论哪种情况, AnInt64都是 8 个字节。C#int类型只是System.Int32. 在两个运行时环境下相同。唯一会根据运行时环境改变的类型是IntPtr

    unsafe
    {
        var size = sizeof(IntPtr); // 4 on x86 bit machines. 8 on x64
    }
于 2009-03-16T20:14:28.547 回答
14

您可能正在考虑int指针或System.IntPtr. 这将是 x64 上的 8 个字节和 x86 上的 4 个字节。指针的大小表明您的内存有 64 位地址。(System.IntPtr.Size在 x64 上 == 8)

无论您是在 x86 还是 x64 上, 的含义int仍然是 4 个字节。也就是说,anint将始终对应于System.Int32

于 2009-03-16T20:09:53.923 回答
6

记住int只是基本类型的编译器别名Int32。鉴于应该很明显,为什么int64 位平台上只有 32 位。

于 2009-03-16T20:08:34.863 回答
2
int i;
int size = BitConverter.GetBytes(i).GetLength(0);

小提琴样本

于 2013-02-15T16:51:56.180 回答