这是一个不寻常的问题,但我确实希望有一个明确的答案。
在我们的办公室里,关于编译器如何高效地生成代码,特别是指令的数量,存在着长期的争论。我们为几乎没有循环的低功耗嵌入式系统编写代码。因此,发出的指令数量与功耗成正比。
我们的大部分代码看起来像这样(注意,没有动态内存分配,没有系统调用,很少的函数调用,很少的循环)。
foo += 3 * (77 + bar);
if (baz > 18 - qux)
bar -= 19 + 7 >> spam;
我可以编译上面的代码片段-O3
并阅读程序集,但我自己无法编写。
我想证明或反驳的说法是,与手写汇编代码相比,编译器生成的代码“胖”了 2-4 倍(因此消耗的功率是手写汇编代码的 2-4 倍)。
我对您有经验的任何编译器感兴趣。
从这个答案我知道GCC和clang可以发出与C代码交错的程序集
gcc -g -c -Wa,-alh foo.cc
这些答案提供了坚实的基础:
如何衡量编译器生成代码的效率?