gpt4 book ai didi

c++ - 在优化代码中是否调用了一个空函数?

转载 作者:IT老高 更新时间:2023-10-28 23:19:37 25 4
gpt4 key购买 nike

如果没有定义TEST宏,我想知道这两段代码是否存在性能差异:

void Func1(int a) {
// ...
}

#ifdef TEST
Func1(123);
#endif

和:

void Func2(int a) {
#ifdef TEST
// ...
#endif
}

Func2(123);

如果没有定义 TESTFunc2 将成为编译器根本不应该调用的空函数,不是吗?

最佳答案

这很大程度上取决于对 Func2 的特定调用是否是内联的。如果是,那么优化编译器应该能够对空函数进行内联调用,就像根本不调用它一样。如果它不是内联的,那么它会被调用并立即返回。

只要函数定义在包含对 Func2 调用的 TU 中可用,就没有明显的理由不内联。

这一切都依赖于 123 是文字的事实,因此评估调用的参数没有副作用。即使函数调用无效,也必须评估 args,因此:

int i = 0;

/* 'i' is incremented, even if the call is optimized out */
Func2(++i);

/* 'i' is not incremented when 'TEST' is undefined */
#ifdef TEST
Func1(++i);
#endif

关于c++ - 在优化代码中是否调用了一个空函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6547464/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com