【问题标题】:Are ints always faster than Numbers/Floats in AS3?整数总是比 AS3 中的数字/浮点数快吗?
【发布时间】:2012-03-01 22:29:08
【问题描述】:

众所周知,在处理数据时,Flash 的行为方式非常难以预测。我很好奇,除了需要精度的值之外,使用数字而不是整数是否有任何性能/内存优势。听说Flash中的一些基本操作可能会在两种类型之间多次转换来解析表达式。我还听说 Flash 运行时实际上在运行时将整数映射到非精度数字/浮点数。这是真的吗?

【问题讨论】:

    标签: actionscript-3 flash


    【解决方案1】:

    Flash 运行时确实是一个黑暗的地方。

    • 正如你提到的 AVM2 does convert big ints into Number
    • 整数实际上是整数。
    • And there's more stuff about ints
    • 以前在循环中使用 Uint 很慢 BUT NOW THEY ARE NOT(文章中的结果似乎是奇怪的字节码生成和 JIT 优化的组合)。
    • 数字在内存中占用更多空间,但与单个 JPEG 文件相比,这是 nothing
    • 从逻辑上讲,在循环中使用uints 感觉更好。
    • 数字是浮点数,您必须小心比较它们。

    Jackson Dunstan 对不同的 AS3 语言结构性能进行了很好的测试。当然,自己检查结果总是好的。从关于 10.2 性能的系列中,您可以看到,对于每个新的 Flash Player 版本,它们都会优化某些内容,但其他内容可能会变慢:123

    附:这个答案可能很快就会过时,并且可能会在几年后被引用,这当然是错误的。

    【讨论】:

      【解决方案2】:

      int 对 Number 没有任何真正的性能优势。因此,如果您没有将变量用于循环索引或需要精确增量的东西,那么 Number 就可以了。事实上,如果你得到一个无效的结果,一个 Number 可以是 NaN,这是一个很好的好处。

      【讨论】:

      • 好吧,你确实获得了内存优势,不过 - int 使用 32 位,Number 使用 64 位。
      • 另外,从您自己的链接来源,这是 senoculars 回复:“+ - / * % 都是数字操作。如果在 int/uint 上使用,它们将被 Flash 播放器转换为数字背景并在操作完成后重铸回 int/uint。| & ^ >> << >>> (bitwize) 将 int/uint 类型保留在播放器中,并针对这些类型进行了优化。"
      • weltraumpirat,您必须使用大量变量才能使 int 和 number 之间的两字节差异成为问题,但您当然是正确的。 :)
      • 不错,引用了 2006 年的一篇文章。uints 不再慢,因为......从永远。请不要传播错误信息。
      • 好点。我做了一个不会改变的假设,但那是很长的时间。已编辑。
      猜你喜欢
      • 2010-09-14
      • 2016-07-23
      • 1970-01-01
      • 2015-01-20
      • 1970-01-01
      • 2011-04-19
      • 1970-01-01
      • 2016-05-24
      • 2016-02-08
      相关资源
      最近更新 更多