在Dart网站上,他们说整数大小是64位,这是整数的最大大小,还是这是任何整数的大小,即使该整数是小数,例如12?
如果每个整数大小均为64位,这会影响应用程序的性能吗?
答案是:“取决于”。
首先,如果将Dart编译为JavaScript,则所有数字均为JavaScript数字,这意味着Dart double
。即使是整数,它们也恰好是非分数双精度数。这意味着您最多具有53位精度。
原始Dart数字是64位整数。如果VM可以从中得到好处,则可以在内部将它们表示为较小的数字。
在64位VM上,所有指针都是64位,因此您不能存储比堆中小(至少在类型数据列表之外)的任何东西。不过,如果您的值是63位有符号整数,则VM可以将其直接存储在指针(所谓的“小整数”或“ smi”)中,否则它必须分配一个堆对象来存储64位,以便它仍然可以区分整数和堆指针之间的差异。这对于垃圾收集很重要。
在32位VM上,所有指针都是32位,并且如果您的整数是31位有符号整数,则可以将其存储在指针中,否则它将成为堆对象。
用于存储数字。对于函数内部的局部变量,VM可以选择取消对该值进行装箱,在堆栈上存储纯整数而不是堆号或带标签的小整数。如果编译器知道您仅使用16位整数,则它(理论上)只能使用16位整数。实际上,小于32位的任何东西可能效率较低,甚至在64位平台上也是如此。
这些优化是出于性能原因而发生的,因此,是的,它会影响性能,并且编译器会尝试避免不必要的开销。
这是当前的实现。只要您在运行程序时无法分辨出差异,就可以随时更改。