我读过一些解释nullable<T>
的文章类型变量,至今没找到任何文章解释nullable<T>
的作用类型变量与不可空类型变量的比较。
是nullable<T>
吗类型变量会消耗更少的内存分配?或者两者相同
附加组件
所以我们没有必要使用nullable<T>
对于不可能为空的每个变量?
最佳答案
假设您正在谈论 Nullable<T>
类型,那么它将始终比等效的不可空类型使用更多的内存。
两者都是值类型,因此可以存储,例如当用作参数或局部变量,或用作连续内存块中的单个元素(即用作数组)时,在堆栈上,这可以在某些情况下改善内存使用特性。换句话说,用 Nullable<T>
您将获得一些引用类型语义,而没有一些与存储相关的缺点。
但是 Nullable<T>
的实例必然包含标称值(即使实例的有效值为 null
,非可空类型的存储仍然存在),以及指示实例是否应被视为 null
的标志。值(value)。很明显,“值加一个标志”将比仅仅“值”占用更多的内存。
请注意 the implementation of Nullable<T>
,至少从存储的角度来看,看起来像这样:
public struct Nullable<T> where T : struct
{
private bool hasValue;
internal T value;
}
你可以清楚地看到这里的值和标志。 T
类型的任何变量的不可空等效项当然只有值(value)。额外的 bool
表示额外的内存需求。
因此,对于任何值类型 T
, Nullable<T>
的实例将占用比 T
实例更多的内存.
关于c# - 可空变量在内存分配中的优势 C#,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30448115/