Dart语言中num与int/double的内存资源占用差异咨询
在Dart中使用num代替int/double的内存问题
核心结论
用num类型声明变量不会直接造成内存浪费,两种声明方式在实际内存使用上没有差异——因为num是int和double的抽象父类,运行时实际存储的对象始终是具体的int或double实例,其内存占用和直接声明对应具体类型完全一致。
详细解释
Dart的类型系统与内存存储逻辑
num是抽象类,无法直接实例化,所有赋值给num变量的对象本质上都是int或double的实例。- 对于字面量赋值场景(比如
num year = 1988;或int year = 1988;),Dart VM会在编译期就确定实际对象类型,运行时直接分配对应类型的内存:- 小整数(符合VM的SMI范围,比如64位系统中-263到263-1内的整数)会直接存储在指针中,不占用额外堆内存;
- 浮点数
double在64位系统中固定占用8字节堆内存。
两种声明方式的内存对比
对比以下两组代码:num year = 1988; num len = 181.45;和
int year = 1988; double len = 181.45;- 运行时
year变量指向的都是同一个int实例,len指向的都是同一个double实例,内存占用完全相同。 - 静态类型
num只是编译期的类型约束,不会改变运行时对象的大小或存储方式。
- 运行时
额外注意事项
- 虽然内存无差异,但在性能敏感场景(比如高频循环),使用具体类型
int/double可以让VM跳过额外的类型检查,获得更优的执行性能——这是性能优化方向,而非内存问题。 - 如果
num变量在运行时频繁切换存储int和double实例,可能会带来类型检查的开销,但依然不会增加单个对象的内存占用。
- 虽然内存无差异,但在性能敏感场景(比如高频循环),使用具体类型
内容的提问来源于stack exchange,提问作者berksoy
相关产品推荐
相关产品推荐

