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

标签 c# variables nullable

我读过一些解释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/

相关文章:

c# - 普通 Windows 10 PC 的 USB 到 GPIO/SPI/I2C/UART?类似于 Raspberry Pi 40 针接头

c# - 我应该如何为我的 C# Windows 窗体应用程序编写我的事件处理程序?

c - 由 scanf() 读取时 double 类型的变量不起作用

c# - 当我将可空 int 转换为字符串时,为什么 null 合并运算符不对它起作用?

c# - 我可以在一行中从 DBNull 转换为 Nullable Bool 吗?

c# - 如何将样式写入 WPF DataGridColumnHeader

c# - 比较列表是否在 SQL 表列中

python - 为什么我的函数不向全局变量返回值?

variables - Tensorflow 节点可以有别名吗?

c# - 构造具有不同输出的 C# 代码,唯一的区别应该是 Nullable<int> 与 int?