2012.11.23

1.获取程序块运行时间

思路很简单,就是在程序块的开头和结尾取两次系统时间,然后一减就可以了,取系统时间的方法主要有三种:

(1)秒级

time_t rawtime;
struct tm * timeinfo;
time ( &rawtime );
timeinfo = localtime ( &rawtime );
int secs = timeinfo->tm_sec;

(2)毫秒级

DWORD tm = ::GetTickCount();
(3)毫微级

LARGE_INTEGER tm;
QueryPerformanceCounter(&tm)
计算差值用tm.QuadPart。

2.POD类型与非POD类型对象拷贝构造以及赋值的效率差异

struct Pod1
{int a};
struct Pod2 : Pod1
{int b};
struct Pod3 : Pod2
{int c};

struct Npod1
{
     int a;
     Npod1(){a=0;}
     Npod1(const Npod1& v){a=v.a;}
     Npod1& operator=(const Npod1& v)
    {
         if (this!=&v)this.a=v.a;
         return *this;
    }
}
struct Npod2 : Npod1
{int b};
struct Npod3 : Npod2
{int c};
template<typename T>
T Copy(T t1, T t2)
{
    T t3 = t1;
    t1 = t2;
    t3 = t1;
    return t3;
}

int main()
{
    Pod3 p1, p2, p3;
    
    DWORD tm1, tm2;
    tm1 = ::GetTickCount();
    for (int i=0; i<100000000; ++i)
         p3 = Copy(p1, p2);
    tm2 = ::GetTickCount();
    cout << tm2 - tm1 << endl;

    D n1, n2, n3;
    tm1 = ::GetTickCount();
    for (int i=0; i<100000000; ++i)
         n3 = Copy(n1, n2);
    tm2 = ::GetTickCount();
    cout << tm2 - tm1 << endl;
}
当优化全关的时候,第二种的时间大概是第一种的5倍多,把内联完全打开,第二种的时间大概是第一种的1.6倍。这种差异是由于POD数据可以通过复制整块内存来实现对象的拷贝和复制,而非POD数据,要通过拷贝构造函数和赋值函数的调用来完成,如果类层次较多,调用的函数会很多,即使内联了,也会比较慢。

所以对于底层数据,例如顶点,能够让它处于POD状态,就尽量让它处于POD状态。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值