- 论坛徽章:
- 0
|
我现在是VC2010编译release版开了/O2,我测试了一下7个参数的情况,发现还是functor比lamdba快:
代码如下: functor运行781ms,lambda运行860ms。我交换了运行的顺序,发现结果不变。
这又是为什么呢?
- #include"stdafx.h"
- #include<iostream>
- #include<string>
- #include<vector>
- #include<functional>
- #include<algorithm>
- #include<Windows.h>
- using namespace std;
- template<class C, class T1, class T2, class T3, class T4, class T5, class T6, class T7>class Pred7Var
- {
- public:
- typedef void (C::*PredPtr)( T1, T2, T3, T4, T5, T6, T7 );
- Pred7Var( T1 p1, T2 p2, T3 p3, T4 p4, T5 p5, T6 p6, T7 p7, PredPtr pPred ) :
- m_p1( p1 ),
- m_p2( p2 ),
- m_p3( p3 ),
- m_p4( p4 ),
- m_p5( p5 ),
- m_p6( p6 ),
- m_p7( p7 ),
- m_pPred( pPred ){}
- void operator()( C* pObject )
- {
- ((*pObject).*m_pPred)( m_p1, m_p2, m_p3, m_p4, m_p5, m_p6, m_p7 );
- }
- private:
- T1 m_p1;
- T2 m_p2;
- T3 m_p3;
- T4 m_p4;
- T5 m_p5;
- T6 m_p6;
- T7 m_p7;
- PredPtr m_pPred;
- };
- struct s{
- void f2(int a,int b){
- i+=a;
- i+=b;
- }
- void f7(int i1,int i2,int i3,int i4,int i5,int i6,int i7){
- i+=i1;
- i+=i2;
- i+=i3;
- i+=i4;
- i+=i5;
- i+=i6;
- i+=i7;
- }
- int i;
- s():i(0){}
- };
- int main(int argc, char *argv[])
- {
- const int l=100000000;
- s* ps=new s[l];
- vector<s*> vps;
- for(int i=0;i<l;++i){
- ps[i].i=1;
- vps.push_back(&ps[i]);
- }
- volatile int i=2;
- volatile int j=i+1;
- {
- DWORD ret1=GetTickCount();
- std::for_each(vps.begin(),vps.end(),
- Pred7Var<s,int,int,int,int,int,int,int>(i,j,i,j,i,j,i,&s::f7));
- DWORD ret2=GetTickCount();
- printf("%d\n",ret2-ret1);
- }
- {
- DWORD ret1=GetTickCount();
- std::for_each(vps.begin(),vps.end(),[&](s* ps){ps->f7(i,j,i,j,i,j,i);});
- DWORD ret2=GetTickCount();
- printf("%d\n",ret2-ret1);
- }
- delete[] ps;
- return EXIT_SUCCESS;
- }
复制代码 |
|