Nullable <T>的内存占用量是多少

PVi*_*itt 21 .net c# memory nullable

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

int? i = null;
Run Code Online (Sandbox Code Playgroud)

并且:

int? i = 3;
Run Code Online (Sandbox Code Playgroud)

这是一般的还是类型依赖的?

Cha*_*ana 17

我不是100%肯定,但我相信它应该是8字节,int32的4个字节,并且(因为每个东西必须在32位机器上对齐4个字节)4个字节用于表示是否为整数的布尔值值是否已指定.

在64位机器上,它仍然是8字节(64位),因为这是可以寻址的最小内存块...

  • 装箱后大小再次不同,因为 Nullable&lt;T&gt; 消失了,所以它要么是空的,要么是装箱的 int。 (2认同)
  • @Virtlink 为真,但由于大多数情况下内存对齐,布尔值实际上需要 4 个字节。例如,当有一个 Nullable&lt;int&gt; 数组时。 (2认同)

Jar*_*Par 12

大小Nullable<T>绝对取决于类型.该结构有两个成员

  • boolean:对于hasValue
  • 值:对于基础值

结构的大小通常会映射到4加上类型参数T的大小.


Dan*_*dor 5

            内部?一 = 3;
  00000038 lea ecx,[ebp-48h] 
  0000003b mov edx,3 
  00000040 拨打 78BFD740 
  00000045 nop              
            a = 空;
  00000046 lea edi,[ebp-48h] 
  00000049 像素或 xmm0,xm​​m0 
  0000004d movq mmword ptr [edi],xmm0 

似乎第一个 dword 用于值,第二个用于空标志。因此,总共 8 个字节。

奇怪的是,BinaryWritter 不喜欢编写可空类型。我在徘徊是否可以将它打包得更紧然后 8 个字节...