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.Int32和System.Int64的名字。
关键字int
别名System.Int32
仍然需要4个字节,即使在64位机器上。
int
表示.NET语言中的Int32
。 这是为了兼容32位和64位体系结构而完成的。
以下是C# 中所有types的表格以及它们映射到.NET的内容。
Int32
在x86和x64上是4个字节。 无论是哪种情况, Int64
都是8个字节。 C# int
types只是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;