x64 上的 sizeof(int)?

问题描述 投票:0回答:7

当我在 C#.NET 项目中执行

sizeof(int)
时,我得到的返回值为 4。我将项目类型设置为 x64,那么为什么它显示为 4 而不是 8?这是因为我正在运行托管代码吗?

c# 64-bit clr sizeof
7个回答
53
投票

关键字

int
别名
System.Int32
仍然需要 4 个字节,即使在 64 位机器上也是如此。


45
投票

各种64位数据模型; Microsoft 在 .NET 中使用 LP64long 和指针都是 64 位(尽管 C 风格指针只能在 C# 中的

unsafe
上下文中使用,或者作为不能用于指针的
IntPtr
值) -算术)。将此与 ILP64 进行对比,其中 int 也是 64 位。

因此,在所有平台上,

int
是 32 位,
long
是 64 位;您可以在基础类型
System.Int32
System.Int64
的名称中看到这一点。


28
投票

int
在 .NET 语言中表示
Int32
。这样做是为了 32 位和 64 位架构之间的兼容性。

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


19
投票

Int32

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

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

14
投票
您可能会想到

int

 指针或 
System.IntPtr
。在 x64 上这将是 8 个字节,在 x86 上将是 4 个字节。指针的大小表明您的内存有 64 位地址。 (x64 上
System.IntPtr.Size
 == 8)

无论您使用的是 x86 还是 x64,

int

 的含义仍然是 4 个字节。也就是说,
int
 始终对应于 
System.Int32


6
投票
记住

int

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


2
投票
int i; int size = BitConverter.GetBytes(i).GetLength(0);

小提琴样本

© www.soinside.com 2019 - 2024. All rights reserved.