关于boost库中shared_ptr执行速度的简单测试

关于boost库中shared_ptr执行速度的简单测试

记得以前在一本书上看过boost::shared_ptr的回带来一定的效率损失,但是并不大.今天闲来无事,编译了一个BOOST并简单测试了一下,看看到底有多少性能损失.测试代码和结果如下:

比较函数
template <class T>
class compareP
{
public:
        bool operator() (const T lh,const T rh) const
        {
                return *lh<*rh;
        }

};


boost:
int _tmain(int argc, _TCHAR* argv[])
{
        DWORD oldtime = GetTickCount();
        typedef map<boost::shared_ptr<string>,size_t,compareP<boost::shared_ptr<string> > > container_type;
        typedef container_type::iterator iterator;
        container_type container;
        for (size_t i(0) ; i<500000 ; ++i)
        {
                boost::shared_ptr<string> pstr(new string);
                char buffer[32];
                *pstr = itoa(i,buffer,10);
                container[pstr]=0;
        }
        cout<<GetTickCount() - oldtime <<endl;
return EXIT_SUCCESS;
}

boost结果:
2000
2015
2015
2016
2017


指针:
int _tmain(int argc, _TCHAR* argv[])
{
        DWORD oldtime = GetTickCount();
        typedef map<string*,size_t,compareP<string*> > container_type;
        typedef container_type::iterator iterator;
        container_type container;
        for (size_t i(0) ; i<500000 ; ++i)
        {
                string *pstr = new string;
                char buffer[32];
                *pstr = itoa(i,buffer,10);
                container[pstr]=0;
        }
        cout<<GetTickCount() - oldtime <<endl;
return EXIT_SUCCESS;
}

指针结果:
937
938
954
953
953

执行速度已经相差一倍了.自动内存管理的代价啊!~~~~
环境:Q8200 2.33GHZ 4G内存

以上只是简单的测试,仅拱参考


补充说明:

很多朋友流言说在MAP中存放string*没有意义。可是我上一个项目就需要这么做。

试想我现在有10篇文档,现在需要统计每篇文档当中每个字出现的次数,还需要统计全部文章中全部字出现的次数。为了保证效率,应当保证每个字在内存当中只留一份拷贝(因为以后有可能统计每个词,甚至每句话出现的次数)。要实现这个功能,是否还有更好的算法?


还有朋友流言说指针版没有销毁string指针。可是在这个程序中执行cout<<GetTickCount() - oldtime <<endl;之前shared_ptr也没有释放资源。所以资源的释放不会造成误差。

luck朋友的方法最为有效,把比较函数变成:

bool operator() (const T &lh,const T &rh) const

        {

                return *lh<*rh;

        }

下面是shared_ptr执行5次的时间:

968

969

985

969

969


下面是string*执行5次的时间:

859

875

860

859

860


看来即使是小对象也不能放松!当很多小对象发生构造和析构时所耗费的时间还是不容小视的!~

你可能感兴趣的:(关于boost库中shared_ptr执行速度的简单测试)