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

本文关键字:分配 内存 变量 | 更新日期: 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的实例占用更多的内存。