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

the advantage of nullable variable in memory allocation C#

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

nullable<T> 类型变量是否会消耗较少的内存分配?或者两者相同

附加组件

所以我们没有必要对每个不可能为空的变量使用nullable<T>

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

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

但是Nullable<T>的实例必然包含标称值(即使实例的有效值为null,非可空类型的存储仍然存在),以及一个标志,指示实例是否应被视为 null 值。显然 "value plus a flag" 比 "value".

占用更多的内存

请注意,至少从存储的角度来看,the implementation of Nullable<T> 看起来像这样:

public struct Nullable<T> where T : struct
{
    private bool hasValue; 
    internal T value;
}

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

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