可能重复:
sizeof(int) on x64?
当编译为x64而不是x86时,IntPtr的大小从4变为8。
int的大小是否也会改变,还是Int32?
当使用pinvoke和处理互操作调用时,这个问题尤为重要。是否需要将所有“int”类型显式更改为声明为Int32?
答案 0 :(得分:6)
没有; int
始终与Int32
同义。
对于P / Invoke,您需要使用IntPtr
来改变位数。
答案 1 :(得分:5)
没有。 C#中的“int”始终被定义为Int32的别名,作为C#语言规范的一部分,它始终具有相同的大小。使用“int”或“Int32”将产生完全相同的IL。
答案 2 :(得分:2)
它仍然是C#中的Int32。但是,非托管C ++,int将成为64位数字。
答案 3 :(得分:1)
Windows中的数据类型
每个应用程序和每个操作系统都有一个抽象的数据模型。许多应用程序没有明确公开此数据模型,但该模型指导了应用程序代码的编写方式。在32位编程模型(称为ILP32模型)中,整数,长整数和指针数据类型的长度为32位。大多数开发人员都没有意识到这个模型。
在64位Microsoft Windows中,数据类型大小的奇偶校验假设无效。使所有数据类型长度为64位会浪费空间,因为大多数应用程序不需要增加大小。但是,应用程序确实需要指向64位数据的指针,并且它们需要能够在选定的情况下具有64位数据类型。这些考虑因素促使Windows团队选择名为LLP64(或P64)的抽象数据模型。 在LLP64数据模型中,只有指针扩展到64位;所有其他基本数据类型(整数和长整数)的长度保持为32位。
64位平台的.NET CLR使用相同的LLP64抽象数据模型。在.NET中,有一种不完整的数据类型,专门用于保存“指针”信息: IntPtr ,其大小取决于它运行的平台(例如,32位或64位)。请考虑以下代码段:
public void SizeOfIntPtr() {
Console.WriteLine( "SizeOf IntPtr is: {0}", IntPtr.Size );
}
在32位平台上运行时,您将在控制台上获得以下输出:
CopySizeOf IntPtr is: 4
在64位平台上,您将在控制台上获得以下输出:
CopySizeOf IntPtr is: 8
如果要在运行时检查是否在64位环境中运行,可以使用IntPtr.Size
作为一种方法来进行此确定。
答案 4 :(得分:0)
不,x64指的是指针的大小,而不是像int这样的单个数据片段。