この質問はあなたには間違っているかもしれませんが、私は答えを見つけることができませんでした。c - 定義された値がハードコードされた数値よりも遅い
最近、私は、このコードに出くわした:
void RDP_G_SETBLENDCOLOR(void)
{
Gfx.BlendColor.R = _SHIFTR(w1, 24, 8) * 0.0039215689f;
Gfx.BlendColor.G = _SHIFTR(w1, 16, 8) * 0.0039215689f;
Gfx.BlendColor.B = _SHIFTR(w1, 8, 8) * 0.0039215689f;
Gfx.BlendColor.A = _SHIFTR(w1, 0, 8) * 0.0039215689f;
if(OpenGL.Ext_FragmentProgram && (System.Options & BRDP_COMBINER)) {
glProgramEnvParameter4fARB(GL_FRAGMENT_PROGRAM_ARB, 2, Gfx.BlendColor.R, Gfx.BlendColor.G, Gfx.BlendColor.B, Gfx.BlendColor.A);
}
}
私は(1/255を参照)0.0039215689fは、最適化の理由のためにハードコードされていることを理解しています。 ここでは、読みやすくするために を定義したいと考えています(ここで選択した名前がそれほど良くない場合でも、例のためです)。
#define PIXEL_VALUE 0.0039215689f
void RDP_G_SETBLENDCOLOR(void)
{
Gfx.BlendColor.R = _SHIFTR(w1, 24, 8) * PIXEL_VALUE;
Gfx.BlendColor.G = _SHIFTR(w1, 16, 8) * PIXEL_VALUE;
Gfx.BlendColor.B = _SHIFTR(w1, 8, 8) * PIXEL_VALUE;
Gfx.BlendColor.A = _SHIFTR(w1, 0, 8) * PIXEL_VALUE;
if(OpenGL.Ext_FragmentProgram && (System.Options & BRDP_COMBINER)) {
glProgramEnvParameter4fARB(GL_FRAGMENT_PROGRAM_ARB, 2, Gfx.BlendColor.R, Gfx.BlendColor.G, Gfx.BlendColor.B, Gfx.BlendColor.A);
}
}
このように定義すると、コード実行が遅くなるのですか?
翻訳単位がコンパイルされる前に、macrosesが展開されています。 – zerkms
コンパイラはこれをすべて処理し、翻訳の1つを可能な限り読みやすくメンテナンス可能にし、コンパイラがアセンブラの生成を心配するようにします。 – SPlatten
* 0.0039215689f(1/255を参照)は最適化のためにハードコードされていることを理解しています*良いコンパイラは自動的にコンパイル時に '1/255'を' 0.0039215689f'に自動的に変換します。 – tilz0R