可空变量在内存分配中的优势 C#

Yu *_*kan 3 c# variables nullable

我读过一些关于nullable<T>类型变量的文章解释,到目前为止我还没有找到任何文章解释nullable<T>类型变量与不可为空类型变量比较。

那个nullable<T>类型变量会消耗较少的内存分配吗?或者两者都一样

添加在

所以nullable<T>当每个变量不可能为空时,我们没有必要使用它?

Pet*_*iho 5

假设您在谈论Nullable<T>类型,那么它总是比等效的不可为空类型使用更多的内存。

两者都是值类型,因此可以在用作参数或局部变量时存储在例如堆栈中,或者作为连续内存块中的单个元素(即作为数组)存储,这在某些情况下可以改善内存使用特性。换句话说,随着Nullable<T>您可以获得一些引用类型语义,而没有一些与存储相关的缺点。

但是 的实例Nullable<T>必然包含名义值(即使实例的有效值为 ,null不可空类型的存储仍然存在),以及指示是否应将实例视为null值的标志。显然,“值加一个标志”将比“值”占用更多的内存。

需要注意的是在实施Nullable<T>,从存储的角度至少看起来是这样的:

public struct Nullable<T> where T : struct
{
    private bool hasValue; 
    internal T value;
}
Run Code Online (Sandbox Code Playgroud)

您可以在这里清楚地看到值和标志。任何类型变量的不可为空的等价物T当然只有值。额外的bool代表额外的内存要求。

因此,对于任何值类型T, 的实例Nullable<T>将比 的实例占用更多的内存T