当前位置:  开发笔记 > 编程语言 > 正文

x64上的sizeof(int)?

如何解决《x64上的sizeof(int)?》经验,为你挑选了6个好方法。

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



1> Andrew Hare..:

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



2> Ðаn..:

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

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


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

3> Ben S..:

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

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



4> andleer..:

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

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


或者您可以检查IntPtr.Size,它不需要不安全的代码.

5> Brian R. Bon..:

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

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



6> Brian Rasmus..:

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

推荐阅读
凹凸曼00威威_694
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有