在JavaScript中,使用我自己的模拟器实现,从32位指令RA
获取寄存器字段i
的值通常表示为:
this.gpr.u32[(i >> 16) & 0x1f]
然而,在函数中多次使用上述表达式是丑陋的,难以遵循和编辑。我已经避免使用该表达式定义变量ra
并使用它,因为我认为它将存储在内存中,并且获取它将是昂贵的。我是否应该担心这一点,或者现代JavaScript引擎是否将变量的值“内联”到定义后面的语句中?虽然使用变量使代码更清晰,但如果它会降低性能敏感环境(如模拟器)中的执行时间,我真的不想使用它。
答案 0 :(得分:6)
答案中有很多“它取决于”。首先,它取决于javascript解释器它可以优化的程度。
然而,如果我理解你的话,你的代码就像是
.... this.gpr.u32[(i >> 16) & 0x1f] ...
.... this.gpr.u32[(i >> 16) & 0x1f] ...
.... this.gpr.u32[(i >> 16) & 0x1f] ...
而不是
ra = this.gpr.u32[(i >> 16) & 0x1f];
.... ra ....
.... ra ....
.... ra ....
在这种情况下,我认为任何javascript引擎都会更快地执行后者。确实,内存中有一个额外的变量ra
。但访问ra
的速度不应低于访问i
加上转移和屏蔽以及访问this.gpr.u32
的速度。