首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在Dart中,整数变量的大小是多少?

在Dart中,整数变量的大小是多少?
EN

Stack Overflow用户
提问于 2019-09-30 04:28:23
回答 1查看 2.2K关注 0票数 3

在Dart站点中,他们说整数大小是64位,这是整数的最大大小,还是任何整数的大小,即使整数是一个小数字,比如12?

如果每个整数大小为64位,这会影响应用程序的性能吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-09-30 12:23:49

答案是:“视情况而定”。

首先,如果将Dart编译成JavaScript,那么所有的Dart数(intdouble值)都由JavaScript Number__s表示。这意味着所有的Dart数都是Dart doubles。即使是整数,它们也恰好是非小数倍,因此最多可以有53位精度。因此,在web上,int值也实现了double

本地(非web) Dart ints是64位的二次补整数.如果VM可以在内部看到优势,那么它可能在内部将其中的一些表示为较小的数字,但这是您不应该看到的实现细节。

在64位VM上,所有指针都是64位,因此不能直接存储任何小于Dart堆中的指针(至少在类型化数据列表之外)。不过,如果您的值是63位有符号整数,VM可以直接将其存储在指针(所谓的“小整数”或"smi")中,否则它必须分配堆对象来存储64位,这样它仍然可以区分整数和堆指针。这对垃圾收集很重要。

在32位VM上,所有指针都是32位,如果您的整数是31位有符号整数,则可以将其存储在指针中,否则它将成为堆对象。

这是为了存储数字,您可以稍后从其他地方读取它们。对于函数中的局部变量( VM知道其访问的所有方式),VM可以选择解压缩值,将普通整数存储在堆栈上,而不是堆号或标记的小整数。如果编译器知道您只使用16位整数,它(理论上)只能使用16位。实际上,小于32位的任何东西都可能效率较低。

这些优化是出于性能原因,所以是的,它影响性能,编译器试图避免不必要的开销。

这就是当前的实现。它可以在任何时候改变,只要你在运行你的程序时分辨不出区别。

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58161519

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档