项目中大量使用functional来替代virtual函数,那么functor函数相对于c function带来的额外成本是多少呢?今天构造一个测试用例来测试下。g++ (GCC) 4.8.5 20150623 (Red Hat 4.8.5-28)
测试如下几种情况:
1.c function
int _func(int a, int b) {
return a + b;
}
2.重载operator()的struct
struct _struct {
int operator()(int a, int b) {
return a + b;
}
};
3.类方法
class _Class{
public:
int op(int a, int b) {return a + b;}
};
4.结构体嵌套类指针
struct _struct2 {
_Class *p;
int operator()(int a, int b) {
return p->op(a, b);
}
};
对如上几种方式分别调用100000次。分别在O0 O1 O3 测试结果如下
time(O0) | time(O1) | time(O3) | |
---|---|---|---|
纯函数 | 322 | 78 | 4 |