#include "stdafx.h"
#include <stdio.h>
#include <stdlib.h>
#include <iostream>
#include <Windows.h>
class ScopeTime
{
public:
ScopeTime()
: start_time(GetTick64())
{
}
~ScopeTime()
{
end_time = GetTick64();
std::cout << end_time - start_time << std::endl;
}
unsigned long long GetTick64()
{
FILETIME file_time;
GetSystemTimeAsFileTime(&file_time);
return ((unsigned long long)file_time.dwHighDateTime << 32 | (unsigned long long)file_time.dwLowDateTime) /10;
}
unsigned long long start_time;
unsigned long long end_time;
};
static const int INNER_LOOP_COUNT = 10000 ;
static const int OUTTER_LOOP_COUNT = 10000 ;
void func1(int a1, int a2, int a3)
{
for(int i=0; i<INNER_LOOP_COUNT; ++i);
}
void func2(int &a1, int &a2, int &a3)
{
for(int i=0; i<INNER_LOOP_COUNT; ++i);
}
inline void func3(int a1, int a2, int a3)
{
for(int i=0; i<INNER_LOOP_COUNT; ++i);
}
inline void func4(int &a1, int &a2, int &a3)
{
for(int i=0; i<INNER_LOOP_COUNT; ++i);
}
void func11()
{
for(int i=0; i<INNER_LOOP_COUNT; ++i);
}
void func12(int a1)
{
for(int i=0; i<INNER_LOOP_COUNT; ++i);
}
void func13(int a1, int a2)
{
for(int i=0; i<INNER_LOOP_COUNT; ++i);
}
void func14(int a1, int a2, int a3)
{
for(int i=0; i<INNER_LOOP_COUNT; ++i);
}
void func15(int a1, int a2, int a3, int a4)
{
for(int i=0; i<INNER_LOOP_COUNT; ++i);
}
template < typename TYPE >
void TestFunc( TYPE func )
{
func();
}
int main(int argc, char* argv[])
{
int a1;
int a2;
int a3;
int a4;
auto lambda1 = [a1]{ for(int i=0; i<INNER_LOOP_COUNT; ++i); };
auto lambda1_1 = [&a1]{ for(int i=0; i<INNER_LOOP_COUNT; ++i); };
auto lambda2 = [a1, a2]{ for(int i=0; i<INNER_LOOP_COUNT; ++i); };
auto lambda2_1 = [&a1, &a2]{ for(int i=0; i<INNER_LOOP_COUNT; ++i); };
auto lambda3 = [a1, a2, a3]{ for(int i=0; i<INNER_LOOP_COUNT; ++i); };
auto lambda3_1 = [&a1, &a2, &a3]{ for(int i=0; i<INNER_LOOP_COUNT; ++i); };
auto lambda4 = [=]{ for(int i=0; i<INNER_LOOP_COUNT; ++i); };
auto lambda4_1 = [&]{ for(int i=0; i<INNER_LOOP_COUNT; ++i); };
TestFunc( lambda3 );
{ ScopeTime st; for(int i=0; i<OUTTER_LOOP_COUNT; ++i) lambda1(); }
{ ScopeTime st; for(int i=0; i<OUTTER_LOOP_COUNT; ++i) lambda1_1(); }
{ ScopeTime st; for(int i=0; i<OUTTER_LOOP_COUNT; ++i) lambda2(); }
{ ScopeTime st; for(int i=0; i<OUTTER_LOOP_COUNT; ++i) lambda2_1(); }
{ ScopeTime st; for(int i=0; i<OUTTER_LOOP_COUNT; ++i) lambda3(); }
{ ScopeTime st; for(int i=0; i<OUTTER_LOOP_COUNT; ++i) lambda3_1(); }
{ ScopeTime st; for(int i=0; i<OUTTER_LOOP_COUNT; ++i) lambda4(); }
{ ScopeTime st; for(int i=0; i<OUTTER_LOOP_COUNT; ++i) lambda4_1(); }
std::cout << std::endl;
{ ScopeTime st;
for(int i=0; i<OUTTER_LOOP_COUNT; ++i) [a1]{ for(int i=0; i<INNER_LOOP_COUNT; ++i); }(); }
{ ScopeTime st;
for(int i=0; i<OUTTER_LOOP_COUNT; ++i) [&a1]{ for(int i=0; i<INNER_LOOP_COUNT; ++i); }(); }
{ ScopeTime st;
for(int i=0; i<OUTTER_LOOP_COUNT; ++i) [a1, a2]{ for(int i=0; i<INNER_LOOP_COUNT; ++i); }(); }
{ ScopeTime st;
for(int i=0; i<OUTTER_LOOP_COUNT; ++i) [&a1, &a2]{ for(int i=0; i<INNER_LOOP_COUNT; ++i); }(); }
{ ScopeTime st;
for(int i=0; i<OUTTER_LOOP_COUNT; ++i) [a1, a2, a3]{ for(int i=0; i<INNER_LOOP_COUNT; ++i); }(); }
{ ScopeTime st;
for(int i=0; i<OUTTER_LOOP_COUNT; ++i) [&a1, &a2, &a3]{ for(int i=0; i<INNER_LOOP_COUNT; ++i); }(); }
std::cout << std::endl;
{ ScopeTime st; for(int i=0; i<OUTTER_LOOP_COUNT; ++i) [=]{ for(int i=0; i<INNER_LOOP_COUNT; ++i); }(); }
{ ScopeTime st; for(int i=0; i<OUTTER_LOOP_COUNT; ++i) [&]{ for(int i=0; i<INNER_LOOP_COUNT; ++i); }(); }
std::cout << std::endl;
{ ScopeTime st; for(int i=0; i<OUTTER_LOOP_COUNT; ++i) func1(a1, a2, a3); }
{ ScopeTime st; for(int i=0; i<OUTTER_LOOP_COUNT; ++i) func2(a1, a2, a3); }
{ ScopeTime st; for(int i=0; i<OUTTER_LOOP_COUNT; ++i) func3(a1, a2, a3); }
{ ScopeTime st; for(int i=0; i<OUTTER_LOOP_COUNT; ++i) func4(a1, a2, a3); }
std::cout << std::endl;
{ ScopeTime st; for(int i=0; i<OUTTER_LOOP_COUNT; ++i) func11(); }
{ ScopeTime st; for(int i=0; i<OUTTER_LOOP_COUNT; ++i) func12(a1); }
{ ScopeTime st; for(int i=0; i<OUTTER_LOOP_COUNT; ++i) func13(a1, a2); }
{ ScopeTime st; for(int i=0; i<OUTTER_LOOP_COUNT; ++i) func14(a1, a2, a3); }
{ ScopeTime st; for(int i=0; i<OUTTER_LOOP_COUNT; ++i) func15(a1, a2, a3, a4); }
std::cout << std::endl;
return 0;
} |