c# - Nullable<T> 的内存占用是多少

标签 c# .net memory nullable

int (Int32) 的内存占用为 4 个字节。但是什么是内存占用:

int? i = null;

和:

int? i = 3;

这是一般情况还是取决于类型?

最佳答案

我不是 100% 确定,但我相信它应该是 8 个字节,int32 应该是 4 个字节,并且(因为在 32 位机器上每件事都必须是 4 字节对齐)另外 4 个字节作为 bool 值表示是否指定了整数值。

注意,感谢@sensorSmith,我现在知道 .Net 的较新版本允许可空值存储在较小的占用空间中(当硬件内存设计允许独立分配较小的内存块时)。在 64 位机器上,它仍然是 8 字节(64 位),因为这是可以寻址的最小内存块......

例如,可为空的 bool 值只需要一个位,IsNull 标志需要另一个位,因此总存储要求小于一个字节,理论上它可以存储在一个字节中,但是,像往常一样,如果可以分配的最小内存块是 8 字节(如在 64 位机器上),那么它仍将占用 8 字节内存。

关于c# - Nullable<T> 的内存占用是多少,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1381308/

相关文章:

memory - Domino 8.5.3 64 位中 HTTPJVMMaxHeapSize 的最佳设置

ubuntu - Docker - 内存问题 - 如何将其设置为更高的值?

java - 传递对 Activity Intent 的引用

c# - 从代码填充 UWP 组合框

c# - 对方法的不同级别的访问

c# - 如何在 ASP.Net Web Forms Identity 中使用 "username"而不是 "email address"登录

c# - 简化条件if语句c#

c# - 将 0-n 个元素序列化到另一个元素内

c# - 不同的应用程序设置取决于配置模式

ios - GuardMalloc 导致虚拟内存耗尽