先讲讲inline 函数
inline
#include<iostream>
using namespace std;
void fun()
{
cout << "Hello, world!\n";
}
int main()
{
int i;
for (i = 0; i<50000; i++)
fun(); //短时间内将会被调用50000次
return 0;
}
fun函数只有一个功能, 就是输出一条 "Hello, world!", 所以在main函数内我们通过控制for循环的方式调用10000次fun函数来实现这个功能, 那么这么做有什么不妥呢?
先来从大致上了解下函数的调用过程:
在一个函数中调用另一个函数, 系统首先会中断原函数的执行, 在中断时需要做一些现场保护工作, 记录当前函数的中断时的一些信息以便被调函数执行完后原函数的继续执行, 记录完成后才会把执行的流程转向被调函数, 等被调函数执行完后再返回原函数继续执行。
对于内容比较多的函数, 这点中断时的这点时间开销基本上是可以忽略不计的, 但是当调用十分频繁执行的内容又较少时, 这点时间久不能忽视了, 即便目前的计算机性能越来越好, 但是在能够更快的情况下我们还是尽量让他更快一些。
0000 次 "Hello, world!" 的程序改成 inline 函数的形式并且用opencv计算内联与否的时间差异:
#include<iostream>
#include <opencv2/opencv.hpp>
using namespace cv;
inline void fun()
{
std::cout << "Hello, world!\n";
}
int main()
{
int i;
double t = (double)getTickCount();
for (i = 0; i<50000; i++)
fun(); //短时间内将会被调用50000次
t = ((double)getTickCount() - t) / getTickFrequency();
printf("averagetime:%f\n", t);
return 0;
}
注:必须要包含<opencv2/opencv.hpp>,否则找不到计算时间函数,using namespace cv;不可置于其上否则找不到。
如果不用,getTickCount代替原函数
可以测试出内联后时间减少1秒左右!!!