可空类型是否存储在堆栈中?

时间:2010-10-29 03:44:24

标签: c# generics

如果你有Nullable<int>,它是否存在于堆栈中?它需要多少字节?

3 个答案:

答案 0 :(得分:3)

正确回答你的两个问题无关紧要。

但是,为了娱乐你,Nullable<T>的一个实例不是一个集合的元素,它不是一个引用类型的字段,不是迭代器块中的本地或者是一个在本地提升的本地lambda或匿名方法可能存储在堆栈中。

但同样,不应该重要。这是一个实现细节(意味着它可能是Microsoft实现CLR的一种方式,但它不一定是,它可能是CLR的Mono实现的另一种方式)。

答案 1 :(得分:3)

Microsoft员工Eric Lippert doesn't like it当您引用堆栈中的值类型时,但是,Nullable<>是值类型。

它们通常位于堆栈上,只是有一个布尔成员,指示值是否为null。因此(不包括alignment引起的填充字节)a Nullable<int>占用5个字节。

答案 2 :(得分:1)

Nullable<T>是一个结构(因此是一个值类型),因此相同的分配位置规则适用于任何其他结构。

Eric Lippert最近发布了这个:The Truth About Value Types

SO:What is the size of a Nullable<Int32>?