在 Dart 站点中,他们说整数大小是 64 位,这是整数的最大大小,还是任何整数的大小,即使整数是一个小数字,例如 12?
如果每个整数大小都是 64 位,这会影响应用程序的性能吗?
答案是:“这取决于”。
首先,如果将 Dart 编译为 JavaScript,则所有 Dart 数字(和int值)都由JavaScriptdouble表示。这意味着所有 Dart 数字都是 Dart 。即使是整数,它们也恰好是非小数双精度数,因此最多可以有 53 位精度。因此,在网络上,也实现了一个值。Numberdoubleintdouble
原生(非 Web)Dartint是 64 位二进制补码整数。如果虚拟机可以看到其中的优势,那么它可能会在内部将其中一些表示为较小的数字,但这是您不应该看到的实现细节。
在 64 位 VM 上,所有指针都是 64 位,因此您不能直接存储小于 Dart 堆中的任何内容(至少在类型化数据列表之外)。不过,如果您的值是63位有符号整数,VM 可以直接将其存储在指针中(所谓的“小整数”或“smi”),否则它必须分配一个堆对象来存储 64 位,这样它仍然可以区分整数和堆指针。这对于垃圾收集很重要。
在32位VM上,所有指针都是32位,如果你的整数是31位有符号整数,它可以存储在指针中,否则它就变成堆对象。
这是为了存储数字,您可以稍后从其他地方读回它们。对于函数内的局部变量,虚拟机知道其访问的所有方式,虚拟机可以选择取消装箱该值,将普通整数存储在堆栈上,而不是堆数字或标记的小整数。如果编译器知道您只使用 16 位整数,那么它(理论上)只能使用 16 位。实际上,任何小于 32 位的数据都可能效率较低。
这些优化是出于性能原因而发生的,所以是的,它会影响性能,并且编译器会尽力避免不必要的开销。
这就是当前的实现。只要您在运行程序时无法分辨出差异,它就可以随时更改。
| 归档时间: |
|
| 查看次数: |
3453 次 |
| 最近记录: |