You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何Dictionary<long, ValueTuple<int,int>>与Dictionary<long, ValueTuple<ushort,ushort>>内存占用相同?

问题原因解析

这是由于.NET在x64平台下的内存对齐机制导致的,具体细节如下:

  • x64架构下,.NET要求值类型的内存大小向上对齐到8字节(与指针长度一致)。
  • 对于(ushort foo, ushort bar)这个值元组,两个ushort字段合计仅4字节,但内存对齐规则会自动填充额外4字节,使其总大小达到8字节。
  • 而(int foo, int bar)的两个int字段各占4字节,合计正好8字节,无需额外填充。
  • Dictionary存储键值对时,每个条目里的Value部分会占用对齐后的完整内存空间。两种情况里每个Value的实际占用都是8字节,加上Key的long类型(8字节),每个键值对总占用16字节,因此整个Dictionary的内存占用完全一致。

你可以通过以下代码验证值类型的实际大小:

Console.WriteLine(Unsafe.SizeOf<(ushort, ushort)>()); // 输出8
Console.WriteLine(Unsafe.SizeOf<(int, int)>());       // 输出8

内容的提问来源于stack exchange,提问作者Ish Thomas

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.30 19:16:02