c - 定义的值比硬编码的数字慢

Cjd*_*coy 2 c macros optimization performance

这个问题对你来说可能显得愚蠢,但我找不到答案,我想确保它按照我的想法运作.

最近我遇到了这段代码:

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);
    }
}
Run Code Online (Sandbox Code Playgroud)

据我所知,0.0039215689f(指的是1/255)由于优化原因而被硬编码.现在假设我想出于可读性原因来定义它(即使这里选择的名称不是更好,它只是用于示例).

#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);
    }
}
Run Code Online (Sandbox Code Playgroud)

这会定义会使代码执行速度变慢吗?

gsa*_*ras 6

这会定义会使代码执行速度变慢吗?

不,因为这两个代码片段是相同的,因为MACROS在编译翻译单元之前被扩展.