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

.NET9中InlineArray大小限制文档与实际行为不符的疑问

关于.NET 9 InlineArray大小限制的问题解答

结论

你遇到的问题是官方文档表述存在歧义,与 runtime 实际执行逻辑不匹配,既不是你的理解错误,也不是 runtime 的 bug。

详细解释

  1. 文档表述的真实含义
    文档中提到的“1 MiB大小限制”,并非是强制的类型加载限制(不会触发TypeLoadException),而是.NET 9针对内联数组栈分配场景的防护机制:当内联数组总大小超过1 MiB时,JIT会自动将其分配到堆上,避免栈溢出风险——这是一个优化/防护逻辑,而非类型加载阶段的硬性限制。

  2. 触发TypeLoadException的真实阈值
    你实际遇到的TypeLoadException,对应的是.NET runtime对单个值类型的最大总大小限制,当前这个阈值为128 MiB(即2^27字节)。只有当内联数组的总大小(元素类型大小 × 数组长度)超过这个值时,才会在类型加载阶段抛出该异常。

  3. 对应你的测试场景
    你的测试代码中,[InlineArray(1_048_577)]的ByteBuffer是byte类型数组,总大小为1 MiB + 1字节,远未达到128 MiB的类型加载限制,因此不会抛出异常;而当长度设为2^27时,总大小刚好达到128 MiB,触发了runtime的硬限制,才抛出TypeLoadException。

补充验证

如果要确认栈分配的限制,可以尝试在栈上创建超大内联数组并执行操作,此时会观察到JIT自动切换到堆分配的行为,而非抛出类型加载异常。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 18:47:18