一个测试内联的例子的有关问题,望各位来帮帮忙~多谢
一个测试内联的例子的问题,望各位来帮帮忙~谢谢
钱能的C++里有这样一个内联函数的例子:
#include <iostream>
#include <time.h>
#include <conio.h>
using namespace std;
int calc1(int x,int y){ return x+y;}
inline int calc2(int x,int y){return x+y;}
main()
{int x[1000],y[1000],z[1000];
clock_t t=clock();
for(int i=0;i <1000;i++)
for(int j=0;j <1000;j++)
for(int k=0;k <1000;k++)
z[i]=calc1(x[j],y[k]);
cout < < "NOT USING INLINE: " < <(clock()-t)/CLK_TCK < < "seconds\n ";
t=clock();
for(int i=0;i <1000;i++)
for(int j=0;j <1000;j++)
for(int k=0;k <1000;k++)
z[i]=calc2(x[j],y[k]);
cout < < "USING INLINE: " < <(clock()-t)/CLK_TCK < < "seconds\n ";
getchar();
}
书上得的结果是没有内联的函数是8.281秒
有内联的函数是2.437秒.
我的机器得出的两个函数全是10秒,晕死我了
谁能帮我解决一下啊...先谢谢拉.
------解决方案--------------------
如果加上了优化,有可能你的那个函数会被自动变成内联
所以你可以尝试直接使用没有加优化的编译命令,也不要加调试信息,
再运行可能会有不一样的结果
--恕我直言,要排除所有编译器的优化有时候不太容易,但内联是否真正内联,
在很多编译器都是可以由你自己控制的,除非你的内联实在不合理
(一个例子是,如果你的内联是一个递归函数,那么当递归到一定程度以后,
或者说递归层数超过了限制,那么编译器还是使用非内联的办法,避免二进制代码的无节制膨胀)
钱能的C++里有这样一个内联函数的例子:
#include <iostream>
#include <time.h>
#include <conio.h>
using namespace std;
int calc1(int x,int y){ return x+y;}
inline int calc2(int x,int y){return x+y;}
main()
{int x[1000],y[1000],z[1000];
clock_t t=clock();
for(int i=0;i <1000;i++)
for(int j=0;j <1000;j++)
for(int k=0;k <1000;k++)
z[i]=calc1(x[j],y[k]);
cout < < "NOT USING INLINE: " < <(clock()-t)/CLK_TCK < < "seconds\n ";
t=clock();
for(int i=0;i <1000;i++)
for(int j=0;j <1000;j++)
for(int k=0;k <1000;k++)
z[i]=calc2(x[j],y[k]);
cout < < "USING INLINE: " < <(clock()-t)/CLK_TCK < < "seconds\n ";
getchar();
}
书上得的结果是没有内联的函数是8.281秒
有内联的函数是2.437秒.
我的机器得出的两个函数全是10秒,晕死我了
谁能帮我解决一下啊...先谢谢拉.
------解决方案--------------------
如果加上了优化,有可能你的那个函数会被自动变成内联
所以你可以尝试直接使用没有加优化的编译命令,也不要加调试信息,
再运行可能会有不一样的结果
--恕我直言,要排除所有编译器的优化有时候不太容易,但内联是否真正内联,
在很多编译器都是可以由你自己控制的,除非你的内联实在不合理
(一个例子是,如果你的内联是一个递归函数,那么当递归到一定程度以后,
或者说递归层数超过了限制,那么编译器还是使用非内联的办法,避免二进制代码的无节制膨胀)