读书人

c++怎么编程证明内联函数效率高于外联

发布时间: 2012-04-13 13:50:24 作者: rapoo

c++如何编程证明内联函数效率高于外联
参考如下:
#include<iostream.h>
#include<windows.h>
class point
{
int x,y;
public:
void setpoint(int xx,int yy);
int getx();
int gety();
};
inline void point::setpoint(int xx,int yy)
{
x=xx;
y=yy;
}
inline int point::getx()
{
return x;
}
inline int point::gety()
{
return y;
}
void main()
{
SYSTEMTIME t1;
GetLocalTime(&t1);
cout<<t1.wMilliseconds<<endl;
point p1;
p1.setpoint(1,2);
p1.getx();
p1.gety();
SYSTEMTIME t2;
GetLocalTime(&t2);
cout<<t2.wMilliseconds<<endl;
}
这样得到的两个时间是相同的,应该怎么改才能达到目的呢?

[解决办法]
不能
内不内联是编译器说了算 你只能建议 不能控制
[解决办法]
想通过测试捕获这么微小的效率差别,几乎都是不可能的。因为程序实际运行会受很多其他因素的影响,编译器优化,CPU cache, process switch 等等。对于这种细致区别,比较可靠的方法还是直接阅读生成的汇编代码,成功 inline 的函数在汇编中应该不出现,如果被 inline,则肯定比非 inline 快,具体快多少,只能数数每种情况对应的汇编语句了,以及每条指令的运算周期了。
[解决办法]

探讨

要证明内联效率高于外联,不是应该用内联测一次、用外联测一次,看时间差别么。
我让它循环了一百万次,确实每次得到的两个时间不一样,但为什么不论用内联还是外联时间所得到差别都是一样的呢?

[解决办法]
首先,内联/外联 函数的参数都弄多点、复杂点,以提高二者的差异;
Release下打开编译器相关优化选项,确认内联真正生效;
各自循环调用至少成千上万次,统计时间(建议使用CPU时间戳来计时,否则统计次数还要大大增加才行)。

[解决办法]
你那个关键字只是给编译器建议,尽量而已
栈开辟问题,手动内联肯定比外联快
p1.getx();这样没有实际动作的调用肯定被优化掉,你release版看能断嘛
[解决办法]
我建议楼主换个老师比较好。
gcc编译器在最优化编译下,你没加inline的函数也可能会自动inline的。
inline简直是一个可以直接遗忘的东西了。

读书人网 >C++

热点推荐