C# 32/64位进程的int行为?
我是一个64位的进程,我的C# 32/64位进程的int行为?,c#,.net,.net-4.0,int,C#,.net,.net 4.0,Int,我是一个64位的进程,我的int大小是8个字节 我正在引用一个编译为32位的dll 此dll有一个函数,它接受int参数 会发生什么 我正在将一个8字节发送到一个4字节的“容器”?不,在64位/C中,int仍然是4字节 在C#中,int总是仅仅是global::System.Int32 将要改变的是引用大小和指针大小,但这些都是由IL抽象出来的,无需任何更改。但是请注意,CLI将仅为32位xor(nand?)64位。您可能需要其中一个是“任意CPU”。它总是映射到系统。因此,在c中只需要4个,在
int
大小是8个字节
我正在引用一个编译为32位的dll
此dll有一个函数,它接受int
参数
会发生什么
我正在将一个8字节
发送到一个4字节
的“容器”?不,在64位/C中,int
仍然是4字节
在C#中,int
总是仅仅是global::System.Int32
将要改变的是引用大小和指针大小,但这些都是由IL抽象出来的,无需任何更改。但是请注意,CLI将仅为32位xor(nand?)64位。您可能需要其中一个是“任意CPU”。它总是映射到
系统。因此,在c中只需要4个,在32位和64位程序集中,INT的大小相同<代码> int <代码>或<代码> INT32 < /COD>始终是32位,而<>代码>长< /COD>或 INT64 总是64位。 <代码>代码> INT/COM>在C语言中总是32位(4字节),而不是在其他一些语言如C++中。
System.IntPtr
在x86机器上为4字节,在64位操作系统上为8字节。如果您想要依赖操作系统的整数类型,请使用此选项。请参阅[此][1]文章。我认为这应该对你有所帮助。[1] :IntPtr更改相关平台上的大小,但int不更改。由于在C#中使用非常少的直接指针,在完全管理的应用程序中,平台更改通常是透明的。@Adamhuldsworth因此在64位进程中,int将具有相同的最大值,但将与8字节容器“访问”?@RoyiNamir no;您仍将向4字节容器发送4字节。至少在.NET/C级别。下面发生的事情(CPU寄存器等)是一个实现细节。@RoyiNamir否,我指的是IntPtr
类型,它实际上会根据所使用的CLI更改大小(根据其大小属性)。正如Marc在回答中所说,指针和引用变得更大(因为它们显然必须容纳64位地址空间)。嗨,Marc,你能详细说明一下CLI注释吗?运行时生成的实际进程将具有固定的32/64模式。不可能两者都有。x86和x64有单独的CLI。将加载相关的CLI,但是:如果一个dll严格为x86,另一个dll严格为x64,则它们可能无法很好地协同工作。“任何CPU”都会更友好。那么8字节的输入大小在哪里呢?(intptr)@Royi没有。与int
相关的任何内容都不会是8字节。当我在上面提到32/64时,我指的是进程。@Royi:是的,但你如何管理操作系统,它处理不同的指针大小,特别是在混合进程中,在混合进程中,只能将64位数据与32位数据混合。如果不是不可能的话,管理起来也会变得一团糟。忘记CLR,想想OS设计,因为指针大小是由OS定义的,而不是由CLR定义的。所以在64位进程中,int将具有相同的最大值,但将作为8字节容器“访问”?