【问题标题】:c - Are defined values slower than hard-coded numbersc - 定义的值是否比硬编码的数字慢
【发布时间】: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


【解决方案1】:

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

不,因为这两个代码 sn-ps 是相同的,因为宏是在编译翻译单元之前展开的。

【讨论】:

    【解决方案2】:

    宏进行文本替换。编译的代码与您在代码中复制并粘贴宏的替换文本完全相同。

    【讨论】:

      【解决方案3】:

      我相信它们根本没有区别。

      宏是一种文本替换模式。所以它会在你的代码被编译之前被替换。

      您可以尝试预处理这两个文件并在终端中查看差异:

      gcc -E 1.c -o 1.i
      gcc -E 2.c -o 2.i
      diff -u 1.i 2.i
      

      【讨论】:

        猜你喜欢
        • 2016-03-10
        • 1970-01-01
        • 1970-01-01
        • 2010-10-27
        • 1970-01-01
        • 2010-10-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多