可空变量在内存分配中的优势 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
表示额外的内存需求。
因此,对于任何值类型 T
,Nullable<T>
的实例将比 T
的实例占用更多的内存。
我看过一些解释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
表示额外的内存需求。
因此,对于任何值类型 T
,Nullable<T>
的实例将比 T
的实例占用更多的内存。