jac*_*ver 2 c++ performance inline function
我对内联函数有轻微的性能问题.请考虑以下代码: -
inline int left(int x) {
return 2*x;
}
inline int right(int x) {
return 2*x+1;
}
main() {
for(int i=0;i<200000000;i++) {
int L=left(i);
int R=right(i);
}
}
Run Code Online (Sandbox Code Playgroud)
这在编译和执行时(带有和不带有-finline-function标志)在我的计算机上大约需要1.90秒.但是,当我用宏替换内联函数时,它只需要1.26秒.虽然函数执行2亿次的可能性很小,但我仍然想知道是否有使用内联函数实现这种性能的方式?
编辑:在收到几个令人反感的评论后,我意识到我对自己的问题不是很清楚.我只是想知道如何在不使用任何优化标志的情况下实现相同的性能.当然,单纯使用-O2或-O3更为明智,我只想学习.
Pot*_*ter 10
对我来说,在-O3优化时使用GCC 4.2.1,内联函数和宏之间的运行时没有区别.在任何一种情况下它都是0.185秒,我非常怀疑我的笔记本电脑比你的机器快10倍.
g++ -S进一步运行表明目标代码是相同的.
我没有调整int L,并int R以volatile int迫使它实际上执行循环.
编辑:较低优化设置的目的是帮助调试.内联函数可能较慢的一个原因-O0是编译器确保所有变量都处于一致状态,您可以在调试器中停止并查看内联函数内的代码行.
有时优化使得无法在内部中断或逐步执行内联函数,就像宏一样.
| 归档时间: |
|
| 查看次数: |
1958 次 |
| 最近记录: |