我目前正在寻找一个简单的c计算优化,我现在有2个解决方案,但我不知道哪个会有最佳性能:
代码1:
u32_tmp = 0x01FFBBAA; //Random value...
tab[0] = (u32_tmp & 0xFC00000) >> 18;
tab[1] = (u32_tmp & 0x3F000) >> 12 ;
tab[2] = (u32_tmp & 0xFC0) >> 6 ;
tab[3] = u32_tmp & 0x3F;
代码2:
u32_tmp = 0x01FFBBAA; //Random value...
tab[3] = u32_tmp & 0x3F;
u32_tmp>>=6;
tab[2] = u32_tmp & 0x3F;
u32_tmp>>=6;
tab[1] = u32_tmp & 0x3F;
u32_tmp>>=6;
tab[0] = u32_tmp & 0x3F;
在你看来哪一个是“最好的”?
答案 0 :(得分:3)
Code 1
显示您从值中提取的值比Code 2
更清楚。那就是我选择的那个。
如果性能至关重要,优化编译器很可能会将这些片段转换为类似的汇编代码 - 但如果这是一个比代码可读性更重要的问题,那么您可以查看在这两种情况下生成的汇编代码和/或对两种变体进行性能测试。
答案 1 :(得分:2)
我相信合理的编译器优化这样的代码根本不值得。大多数时候,无论你多么努力地用一些黑客来优化代码,它甚至可能会变得更糟。如今,编译器在优化代码方面做了很好的非常好的工作。优化逻辑是可以产生差异的因素。如果对上述两个版本进行基准测试甚至显示其中一个版本的优化已开启,我会感到惊讶。