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

Dart List可存储的元素最大数量是多少?

Dart List 最大可容纳元素上限说明

Dart 语言规范没有定义统一的 List 长度硬限制,实际可容纳的最大元素数量取决于运行环境以及 List 存储的元素类型,具体可以分为两类场景:

1. Native 运行环境(Flutter 移动端/桌面端、Dart 服务端)

这里的运行环境指 Dart 以 JIT 或 AOT 模式编译为原生机器码运行的场景,上限由系统可分配给进程的内存决定:

  • 32位系统:进程可访问的用户态内存通常在 1~2GB 区间,除去 Dart 运行时本身占用的内存,若存储的是对象引用(每个引用占4字节),List 最大长度约为 2.5亿~5亿;若存储的是基础值类型(比如 int、double 或 TypedData 元素),根据单个元素的内存占用不同,上限会对应提升,比如 Uint8List 单个元素占1字节,最大长度可达 10亿~20亿。
  • 64位系统:理论寻址上限为 2^64,常规消费级设备的物理内存远低于这个阈值,实际上限就是设备剩余可用内存,正常业务场景下完全不可能触顶,无需额外关注。

2. Web 运行环境(编译为 JavaScript)

Dart 编译为 JS 后,List 本质映射为 JavaScript 的 Array 类型,ECMAScript 规范明确规定 Array 长度的硬上限为 2^32 - 1(也就是 4294967295),超出这个长度会直接抛出 RangeError。

补充说明:官方提到的可增长 List 仅扩容逻辑和固定长度 List 有差异,最大长度上限和上述规则完全一致。可增长 List 每次扩容会申请当前长度 1.5~2 倍的连续内存,只要剩余内存足够就能持续扩容,直到触达当前环境的上限。
如果需要确认当前运行环境的实际最大长度,可以运行以下测试代码:

void main() {
  try {
    final list = [];
    while (true) {
      list.add(null);
    }
  } catch (e) {
    print('当前环境普通List最大长度约为:${(e as OutOfMemoryError).unsuccessfulAllocationSize ?? list.length}');
  }
}

内容的提问来源于stack exchange,提问作者Cheam Jing-En

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 19:36:02