1

我目前正在寻找一个简单的 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;

在您看来,哪一个是“最好的”?

4

2 回答 2

3

Code 1Code 2在我看来,比 更清楚地显示了您从值中提取的位。那是我选择的那个。

如果性能至关重要,那么优化编译器很有可能会将这两个片段转换为相似的汇编代码 - 但如果这比代码可读性更重要,您可以查看在这两种情况下生成的汇编代码和/或进行性能测试关于这两个变体。

于 2013-09-27T13:28:01.987 回答
2

我相信一个合理的编译器优化这样的代码根本不值得。大多数时候,无论你多么努力地尝试通过一些技巧来优化代码,它甚至可能会变得更糟。如今,编译器在优化代码方面做得非常好。优化逻辑是可以有所作为的。如果对上述两个版本进行基准测试甚至显示打开优化的版本之一的一致优势,我会感到惊讶。

于 2013-09-27T13:27:50.307 回答