#include <sys/time.h>
#include <string>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include <iostream>
#include <tr1/memory>
using namespace std;
#define REPEAT_TIME 100000
#define TYPE TESTA
class TESTA
{
public:
int a;
/*
TESTA()
{
std::cout<<"create a\n";
}
~TESTA()
{
std::cout<<"destroy a\n";
}
*/
};
void do_time_test(void (*tp)())
{
struct timeval start,end;
memset((void*)&start,0,sizeof(struct timeval));
memset((void*)&end,0,sizeof(struct timeval));
gettimeofday(&start,NULL);
tp();
gettimeofday(&end,NULL);
long sum=0;
sum=1000000*(end.tv_sec-start.tv_sec)+(end.tv_usec-start.tv_usec);
std::cout<<"total elapsed time:"<<sum<<std::endl;
}
extern "C" void shared_ptr_test();
void shared_ptr_test()
{
int i=0;
int k=0;
for(i=0;i<REPEAT_TIME;i++)
{
shared_ptr<TYPE> s1(new TYPE);
k++;
k++;
k++;
}
}
extern "C" void wild_ptr_test();
void wild_ptr_test()
{
int i=0;
int k=0;
for(i=0;i<REPEAT_TIME;i++)
{
TYPE *s1=new TYPE;
delete s1;
k++;
k++;
k++;
}
}
int main()
{
std::cout<<"test shared_ptr_test start"<<std::endl;
do_time_test(shared_ptr_test);
std::cout<<"test shared_ptr_test end"<<std::endl; std::cout<<"test shared_ptr_test start"<<std::endl;
do_time_test(shared_ptr_test);
std::cout<<"test shared_ptr_test end"<<std::endl;
std::cout<<"test wild_ptr_test start\n";
do_time_test(wild_ptr_test);
std::cout<<"test wild_ptr_test end\n";
}
发现用第一次调用do_time_test总是耗掉的时间比较多,而之后的两次调用所消耗的时间明显的减少,这
可能与进程的调度有关?
即使将gettimeofday撤换掉,用linux的settimer ITIMER_REAL 来测也会有这种现象。