gpt4 book ai didi

dart - Dart中整数变量的大小是多少

转载 作者:行者123 更新时间:2023-12-03 03:16:23 24 4
gpt4 key购买 nike

在 Dart 网站上,他们说整数大小是 64 位,这是整数的最大大小,还是任何整数的大小,即使整数是 12 之类的小数字?

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

最佳答案

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

首先,如果将 Dart 编译为 JavaScript,所有 Dart 数字(intdouble 值)都由 JavaScript Numbers。这意味着所有 Dart 编号都是 Dart double。即使是整数,它们也恰好是非小数 double ,因此最多可以有 53 位精度。因此,在 Web 上,int 值也实现了 double

原生(非网络)Dart int 是 64 位二进制补码整数。如果 VM 可以看到其中的优势,它可能会在内部将其中一些表示为较小的数字,但这是您不应该看到的实现细节。

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

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

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

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

这是当前的实现。只要您在运行程序时无法区分,它就可以随时更改。

关于dart - Dart中整数变量的大小是多少,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58161519/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com