Modulu vs循环中的if语句

sho*_*ham 0 c c++

我有一个像这样的循环:

for(i = 0; i < arrayLength; i++)
{
    result[i / 8] = SETBIT(result[i / 8], ++(*bitIndex), array[i]);
    *bitIndex %= 8;
}
Run Code Online (Sandbox Code Playgroud)

我想知道什么是更好的,性能方面,如果我使用上面的风格,或这种风格:

for(i = 0; i < arrayLength; i++)
{
    result[i / 8] = SETBIT(result[i / 8], ++(*bitIndex), array[i]);
    if(*bitIndex == 8) *bitIndex = 0;
}
Run Code Online (Sandbox Code Playgroud)

这是在C中,用GCC编译,也可以理解.

谢谢

Lun*_*din 5

谈论优化没有任何意义......

  • 没有特定的目标系统
  • 在确保所有编译器优化都已启用并正常工作之前
  • 在你进行某种基准测试之前

在您的情况下,对于大多数系统,两个示例之间没有区别.你真正应该关注的是编写可读代码,而不是反过来.考虑将程序重写为以下内容:

for(i = 0; i < arrayLength; i++)
{
    (*bitIndex)++;
    SETBIT(&result[i / 8], *bitIndex, array[i]);
    *bitIndex %= 8;
}
Run Code Online (Sandbox Code Playgroud)

这可能会产生与您已经拥有的完全相同的二进制可执行文件,+ - 几个CPU标记.