可空变量在内存分配中的优势
本文关键字:分配 内存 变量 | 更新日期: 2023-09-27 17:50:46
我读过一些关于nullable<T>
类型变量的文章,到目前为止,我还没有发现任何文章解释nullable<T>
类型变量与非空类型变量的影响。
是nullable<T>
类型变量将消耗较少的内存分配?或者两者相同
所以我们没有必要使用nullable<T>
为每个变量时,它没有可能是空的?
假设您谈论的是Nullable<T>
类型,那么它将总是比等效的非空类型使用更多的内存。
都是值类型,因此可以作为参数或局部变量存储在堆栈中,或者作为连续内存块中的单个元素(即作为数组),这可以在某些情况下改善内存使用特性。换句话说,使用Nullable<T>
,您可以获得一些引用类型语义,而没有一些与存储相关的缺点。
但是Nullable<T>
的实例必须包含名义值(即使实例的有效值是null
,非空类型的存储仍然存在),以及指示该实例是否应被视为null
值的标志。显然,"value +一个标志"会比"value"占用更多的内存。
Nullable<T>
的实现,至少从存储的角度来看,是这样的:
public struct Nullable<T> where T : struct
{
private bool hasValue;
internal T value;
}
您可以清楚地看到这里的值和标志。对于任何类型为T
的变量,其非空等价物当然只有值。额外的bool
表示额外的内存需求。
因此,对于任何值类型T
, Nullable<T>
的实例将比T
的实例占用更多的内存。