专职C++

不能停止的脚步

  C++博客 :: 首页 :: 联系 :: 聚合  :: 管理
  132 Posts :: 7 Stories :: 134 Comments :: 0 Trackbacks

常用链接

留言簿(13)

我参与的团队

搜索

  •  

最新评论

阅读排行榜

评论排行榜

60天内阅读排行

平时用dynamic_cast,但是一直没有考虑过性能。但是性能怎么样,还真没想过。下测试就是一段测试程序,在linux下跑。
循环2亿次,用dynamic_cast<XTestEx *>()的时候是2.39978秒,用(XTestEx *)直接转的时间是0.723503秒。如果加上附加代码带来的误差。dynamic_cast<XTestEx *>()费时是(XTestEx *)的近4倍.但总的来说,性能影响不大!
#include <iostream>
#include<sys/time.h>

using namespace std;

class XTestBase
{
public:
    virtual ~XTestBase(){}
    virtual int getValue() = 0;
    
};

class XTestEx : public XTestBase
{
public:
    virtual ~XTestEx(){}
    virtual int getValue() 
    {
        return 100;
    }
};

int main(int argc, char * argv[])
{
    struct timeval st1,st2;

    XTestBase * pB = new XTestEx();
    int iC = 0;
    gettimeofday(&st1, NULL);
    for(int i = 0; i < 200000000; i++)
    {
        XTestEx * p = dynamic_cast<XTestEx *>(pB);
        iC += p->getValue();
    }
    gettimeofday(&st2, NULL);
    long long diff  = 1000000ll * (st2.tv_sec-st1.tv_sec)+ st2.tv_usec-st1.tv_usec;
    cout<<"diff:"<<(diff/1000000.0)<<endl;

    gettimeofday(&st1, NULL);
    for(int i = 0; i < 200000000; i++)
    {
        XTestEx * p = (XTestEx *)pB;
        iC += p->getValue();
    }
    gettimeofday(&st2, NULL);
    diff  = 1000000ll * (st2.tv_sec-st1.tv_sec)+ st2.tv_usec-st1.tv_usec;
    cout<<"diff:"<<(diff/1000000.0)<<endl;

    return 0;
}
posted on 2014-04-02 11:46 冬瓜 阅读(1264) 评论(1)  编辑 收藏 引用 所属分类: 原创linux

Feedback

# re: 小测试一下dynamic_cast 2016-02-15 10:56 Θ§奏之章℡
有没有试试看更多层次的继承,菱形继承什么的带来的影响?  回复  更多评论
  


只有注册用户登录后才能发表评论。
【推荐】超50万行VC++源码: 大型组态工控、电力仿真CAD与GIS源码库
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理