0

可能な限り最適化したいので、どのコードがより速く実行されるのか疑問に思っていました.

コード A:

if(((a & 0x0FFF) + (b & 0x0FFF)) & 0x1000 != 0)
{
    Register.setHCarryFlag(true);
}
else
{
    Register.setHCarryFlag(false);
}

コード B:

Register.setHCarryFlag(((a & 0x0FFF) + (b & 0x0FFF))& 0x1000 != 0);

私が質問する理由は、コード B は分岐しないのではないかと疑っていますが、それぞれがどのように機械語コードに変換されるかはわかりません。

さらに良いことに、コードの各部分から生成されたマシン コードを確認する方法はありますか?

4

2 に答える 2

3

どのように変えても、2 番目のアプローチの方が安全です。なぜなら、そこには基本的に分岐がなく、純粋な計算だけだからです。優れた JIT コンパイラーは、最初の例の分岐を削除できることを認識しているかもしれませんが、JIT にとって、そして人間の読者にとってなぜそれがより困難なのかを理解することができます。

于 2015-08-30T09:52:28.963 に答える