use*_*315 3 c++ optimization performance
如果我有以下功能:
void foo(DoThisSometimes, DoThisAlways)
{
if (DoThisSometimes == 1)
{
//Do stuff
}
//Do other stuff
{
Run Code Online (Sandbox Code Playgroud)
内联代码调用此函数DoThisSometimes为0,是否有任何编译器会从内联函数中删除这部分代码:
if (DoThisSometimes == 1)
{
//Do stuff
}
Run Code Online (Sandbox Code Playgroud)
一个体面的编译器当然应该做这个优化,而GCC确实如此.以下来源:
#include <cstdio>
inline void foo(bool maybe)
{
if (maybe) {
printf("Maybe\n");
}
printf("Always\n");
}
int main()
{
foo(true);
foo(false);
}
Run Code Online (Sandbox Code Playgroud)
编译(优化-O3)到:
0000000000400410 <main>:
400410: 48 83 ec 08 sub $0x8,%rsp
400414: bf e4 05 40 00 mov $0x4005e4,%edi
400419: e8 d2 ff ff ff callq 4003f0 <puts@plt>
40041e: bf ea 05 40 00 mov $0x4005ea,%edi
400423: e8 c8 ff ff ff callq 4003f0 <puts@plt>
400428: bf ea 05 40 00 mov $0x4005ea,%edi
40042d: e8 be ff ff ff callq 4003f0 <puts@plt>
400432: 31 c0 xor %eax,%eax
400434: 48 83 c4 08 add $0x8,%rsp
400438: c3 retq
400439: 0f 1f 00 nopl (%rax)
Run Code Online (Sandbox Code Playgroud)
puts无条件地召唤三次.
| 归档时间: |
|
| 查看次数: |
123 次 |
| 最近记录: |