【发布时间】:2011-11-14 15:50:38
【问题描述】:
我正在阅读 JIT 相对于预编译的优势,其中提到的其中一个是 JIT 可以根据实际运行时数据调整分支预测。现在我已经很久没有在大学写过编译器了,但在我看来,在大多数情况下(没有明确的 goto),预编译代码也可以实现类似的效果。
考虑以下代码:
test x
jne L2:
L1: ...
jmp L3:
L2: ...
L3:
如果我们有一些运行时检测来查看“jne L2”为真的次数,它可以物理交换 L1: 块和 L2: 块中的所有指令。当然,它必须知道在交换期间任何一个块中都没有线程,但这些都是细节......
test x
jeq L1:
L2: ...
jmp L3:
L1: ...
L3:
我了解将程序代码加载到只读内存等时也会出现问题,但这是一个想法。
所以我的问题是,这样的 JIT 优化对于 C/C++ 是否可行,还是我错过了一些无法做到的根本原因?有没有针对 C/C++ 的 JIT 优化器?
【问题讨论】:
-
问题需要在句子的某处加上问号。您面临的具体问题是什么?
-
编辑了原帖。没问题,只是想知道。
-
我没有得到“没有明确的 goto”部分。你在谈论跳转指令。有什么区别?
-
我的意思是源代码中没有明确的 goto 从代码中的其他地方直接跳转到“then”或“else”块,即从条件语句之外。
-
@Jay - 啊。在这种情况下,我希望 JIT 也可以修补这些引用,否则它会做一个相当半途而废的工作。 :P
标签: c++ c optimization branch jit