【发布时间】:2023-04-02 21:40:01
【问题描述】:
在 .Net 中,整数是值类型,这意味着它存储在堆栈中。 整数也是类(通常是 System.Int32)。它们有CompareTo、Equals、...等方法。因此,它们应该在堆栈上占用超过四个字节。 然而,下面的示例显示它们恰好占用 4 个字节:
unsafe static void Main()
{
int a = 2, b = 4;
Console.WriteLine("Adress of a : {0}", (int)&a);
Console.WriteLine("Adress of b : {0}", (int)&b);
Console.WriteLine("Size of integer: {0}", (int)(&a) - (int)(&b));
}
输出:
Adress of a : 1372876
Adress of b : 1372872
Size of integer: 4
CLR 是否对整数和其他值类型(float、long、double、...)进行特殊处理?
【问题讨论】:
-
我认为 int32 是一个结构,而不是一个类。
-
尝试在 64 位操作系统上运行它...
-
即使这样,平台仍将整数保留为 4 个字节。 native int 那是另一回事。虽然我承认这个坏例子可能会产生不同的价值
-
Mathieu 计算大小的方法非常脆弱。改用 sizeof() 。 msdn.microsoft.com/en-us/library/eahchzkf.aspx
-
“因此,它们应该在堆栈上占用超过四个字节”为什么?您需要存储哪些元数据,因为它是一个堆栈变量?