Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/shell/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 32/64位进程的int行为?_C#_.net_.net 4.0_Int - Fatal编程技术网

C# 32/64位进程的int行为?

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个,在

我是一个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个,在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字节容器“访问”?