x64上的sizeof(int)?

ihe*_*arp 44 c# clr 64-bit sizeof

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

And*_*are 50

关键字int别名System.Int32仍需要4个字节,即使在64位计算机上也是如此.


Ðаn*_*Ðаn 40

各种64位数据模型 ; Microsoft使用LP64 for .NET:long和指针都是64位(虽然传统的C风格指针不存在.NET).将此与ILP64进行对比,其中int也是64位.

因此,在所有平台上,unsafe是32位并且IntPtr是64位; 您可以在基础类型System.Int32System.Int64的名称中看到这一点.

  • 您应该编辑您的答案,因为它是可接受的答案,以使其完全正确.删除你说的"尽管传统的C风格指针不存在.NET",细节System.IntPtr取决于架构. (9认同)
  • 您可以在C#中使用“ C样式”指针,只需要在不安全的上下文中完成即可。就像“ fnieto”所说,您需要注意IntPtr确实取决于平台,其中x86中的“ sizeof(IntPtr)== 4”和x64中的“ sizeof(IntPtr)== 8”。 (2认同)

Ben*_*n S 26

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

这是C#中所有类型以及它们映射到.NET的方式.


and*_*eer 17

一个Int32是在x86和x64 4个字节.一个Int64是8字节的情况.C#int类型只是一个别名System.Int32.两个运行时环境下都相同.根据运行时环境改变的唯一类型是IntPtr:

    unsafe
    {
        var size = sizeof(IntPtr); // 4 on x86 bit machines. 8 on x64
    }
Run Code Online (Sandbox Code Playgroud)

  • 或者您可以检查IntPtr.Size,它不需要不安全的代码. (5认同)

Bri*_*ndy 13

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

int无论您使用的是x86还是x64,其含义仍然是4个字节.也就是说,一个int永远对应于System.Int32.


Bri*_*sen 5

记住int只是基本类型的编译器别名Int32.鉴于为什么int在64位平台上只有32位应该是显而易见的.