【发布时间】:2017-09-19 06:15:56
【问题描述】:
这个问题对你来说可能很愚蠢,但我找不到答案,我想确保它按我的想法工作。
最近我遇到了这段代码:
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);
}
}
我了解到,出于优化原因,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);
}
}
这个定义会使代码执行速度变慢吗?
【问题讨论】:
-
同理,宏是在编译翻译单元之前展开的。
-
编译器会处理这一切,它是一种翻译,使事情尽可能可读和可维护,让编译器担心产生汇编程序。
-
我知道 0.0039215689f(指 1/255)出于优化原因是硬编码的。 一个好的编译器会自动将
1/255转换为0.0039215689f编译时间本身。 -
@tilz0R 或者更确切地说是
1.0f/255.0f.
标签: c performance optimization macros