Dart中整数变量的大小是多少
What is the size of an integer variable in Dart
在 Dart 网站上他们说整数大小是 64 位,这是整数的最大大小,还是任何整数的大小,即使整数是 12 之类的小数字?
如果每个整数大小都是 64 位,这会影响应用程序的性能吗?
答案是:“视情况而定”。
首先,如果你将 Dart 编译为 JavaScript,所有 Dart 数字(int
和 double
值)都由 JavaScript 表示Number
s。这意味着所有 Dart 编号都是 Dart double
s。即使是整数,它们也恰好是非小数双精度数,因此最多可以有 53 位精度。因此,在网络上,int
值也实现了 double
。
原生(非网络)Dart int
是 64 位二进制补码整数。如果 VM 可以看到其中的优势,它可能会在内部将其中一些表示为较小的数字,但这是您不应该看到的实现细节。
在 64 位 VM 上,所有指针都是 64 位的,因此您不能直接在 Dart 堆中存储任何小于 64 位的指针(至少在类型化数据列表之外)。尽管如此,如果你的值是一个 63 位有符号整数,VM 可以将它直接存储在一个指针(所谓的“小整数”或“smi”)中,否则它有分配一个堆对象来存储 64 位,这样它仍然可以区分整数和堆指针。这对垃圾收集很重要。
在32位的VM上,所有的指针都是32位的,如果你的整数是31位的有符号整数,可以存入指针,否则成为堆对象。
这是为了存储数字,您可以稍后从其他地方读取它们。对于函数内的局部变量,VM 知道它的所有访问方式,VM 可以选择 unbox 值,将普通整数存储在堆栈上而不是堆数字或标记小整数。如果编译器知道你只使用 16 位整数,它可以(理论上)只使用 16 位。实际上,任何小于 32 位的东西都可能效率较低。
这些优化是出于性能原因,所以是的,它会影响性能,并且编译器会尽量避免不必要的开销。
这是当前的实现。它可以随时更改,只要您在 运行 您的程序时无法区分。
在 Dart 网站上他们说整数大小是 64 位,这是整数的最大大小,还是任何整数的大小,即使整数是 12 之类的小数字?
如果每个整数大小都是 64 位,这会影响应用程序的性能吗?
答案是:“视情况而定”。
首先,如果你将 Dart 编译为 JavaScript,所有 Dart 数字(int
和 double
值)都由 JavaScript 表示Number
s。这意味着所有 Dart 编号都是 Dart double
s。即使是整数,它们也恰好是非小数双精度数,因此最多可以有 53 位精度。因此,在网络上,int
值也实现了 double
。
原生(非网络)Dart int
是 64 位二进制补码整数。如果 VM 可以看到其中的优势,它可能会在内部将其中一些表示为较小的数字,但这是您不应该看到的实现细节。
在 64 位 VM 上,所有指针都是 64 位的,因此您不能直接在 Dart 堆中存储任何小于 64 位的指针(至少在类型化数据列表之外)。尽管如此,如果你的值是一个 63 位有符号整数,VM 可以将它直接存储在一个指针(所谓的“小整数”或“smi”)中,否则它有分配一个堆对象来存储 64 位,这样它仍然可以区分整数和堆指针。这对垃圾收集很重要。
在32位的VM上,所有的指针都是32位的,如果你的整数是31位的有符号整数,可以存入指针,否则成为堆对象。
这是为了存储数字,您可以稍后从其他地方读取它们。对于函数内的局部变量,VM 知道它的所有访问方式,VM 可以选择 unbox 值,将普通整数存储在堆栈上而不是堆数字或标记小整数。如果编译器知道你只使用 16 位整数,它可以(理论上)只使用 16 位。实际上,任何小于 32 位的东西都可能效率较低。
这些优化是出于性能原因,所以是的,它会影响性能,并且编译器会尽量避免不必要的开销。
这是当前的实现。它可以随时更改,只要您在 运行 您的程序时无法区分。