以下占用多少存储空间?

时间:2010-06-12 00:37:48

标签: c# integer storage

int 72

这是我们在C#课中讨论的一个问题。我说2个字节,其他人说由于整数类型它使用32位或4个字节。哪个是对的?

3 个答案:

答案 0 :(得分:8)

你需要更加具体。你在想:

  • 保存该值的内存中变量的大小
  • 要将该值加载到IL堆栈中的MSIL的大小,以便可以在表达式
  • 中使用它
  • 用于声明能够保存值的本地变量的MSIL的大小
  • 用于声明能够保存值
  • 的成员变量的MSIL的大小
  • 运行时从MSIL生成的机器语言的大小
  • 与之关联的元数据和调试信息的大小
  • 别的什么?

与程序中出现的(int)72等整数文字的外观有很多不同的“成本”。如果它是更大表达式的一部分,则可以在编译时进行简化,使得文字的边际运行时成本完全没有(除了调试器以显示更长的源代码片段)。

答案 1 :(得分:2)

在大多数情况下,它将在堆栈上消耗4个字节。这是因为int是映射到Common Type System (CTS)Int32的C#关键字。

如果必须装盒,事情会变得复杂一些。有关拳击的解释,请参阅this文章。盒装值实际上会占用堆上的12个字节(至少在32位系统上); 4表示实际数据,4表示同步块,4表示类型句柄或方法表。

所以问题不是那么简单。

答案 2 :(得分:0)

一根绳子有多长?

这取决于您运行的处理器体系结构(甚至可能使用您使用的编译器)。 This page解释了 - 并给出了答案。