如果我有以下功能:
void foo(DoThisSometimes,DoThisAlways) { if (DoThisSometimes == 1) { //Do stuff } //Do other stuff {
内联代码调用此函数,DoThisSometimes为0,是否有任何编译器可以从内联函数中删除这部分代码:
if (DoThisSometimes == 1) { //Do stuff }
解决方法
一个体面的编译器肯定应该做这个优化,而GCC确实如此.以下来源:
#include <cstdio> inline void foo(bool maybe) { if (maybe) { printf("Maybe\n"); } printf("Always\n"); } int main() { foo(true); foo(false); }
编译(使用优化-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)
无条件地召唤三次.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。