std::deque vs Deque
Table of Contents

概要

本文比较std:deque(使用系统默认的deque实现及标准内存分配器)和Deque(使用sgi stl的deque,并且内存分配器为std::ScopeAlloc)。

测试环境

CPU:1.66 G (2CPUs)
操作系统:Windows XP
编译器:Visual C++ 6.0
优化选项:Maximize speed(最大速度)
C库:Multithreaded DLL
配置:Release版本

对比

测试程序(参见<stdext/Deque.h>):

template <class LogT>
class TestAprPools : public TestCase
{
    WINX_TEST_SUITE(TestAprPools);
        WINX_TEST(testCompare);
    WINX_TEST_SUITE_END();
 
    enum { N = 40000 };
 
    void doStlDeque(LogT& log)
    {
        typedef std::deque<int> DequeT;
        log.print("===== std::deque =====\n");
        std::PerformanceCounter counter;
        {
            DequeT coll;
            for (int i = 0; i < N; ++i)
                coll.push_back(i);
        }
        counter.trace(log);
    }
 
    void doDeque(LogT& log)
    {
        typedef NS_STDEXT::Deque<int> DequeT;
        log.print("===== Deque (ScopeAlloc) =====\n");
        std::PerformanceCounter counter;
        {
            NS_STDEXT::BlockPool recycle;
            NS_STDEXT::ScopeAlloc alloc(recycle);
            DequeT coll(alloc);
            for (int i = 0; i < N; ++i)
                coll.push_back(i);
        }
        counter.trace(log);
    }
 
    void doShareAllocDeque(LogT& log)
    {
        typedef NS_STDEXT::Deque<int> DequeT;
        NS_STDEXT::BlockPool recycle;
        log.newline();
        for (int i = 0; i < 5; ++i)
        {
            log.print("===== doShareAllocDeque =====\n");
            NS_STDEXT::PerformanceCounter counter;
            {
                NS_STDEXT::ScopeAlloc alloc(recycle);
                DequeT coll(alloc);
                for (int i = 0; i < N; ++i)
                    coll.push_back(i);
            }
            counter.trace(log);
        }
    }
 
    void testCompare(LogT& log)
    {
        for (int i = 0; i < 5; ++i)
        {
            log.newline();
            doStlDeque(log);
            doDeque(log);
        }
        doShareAllocDeque(log);
    }
};

测试结果:

===== std::deque =====
---> Elapse 1867 ticks (0.52 ms) (0.00 min) ...
===== Deque (ScopeAlloc) =====
---> Elapse 1075 ticks (0.30 ms) (0.00 min) ...

===== std::deque =====
---> Elapse 1687 ticks (0.47 ms) (0.00 min) ...
===== Deque (ScopeAlloc) =====
---> Elapse 1061 ticks (0.30 ms) (0.00 min) ...

===== std::deque =====
---> Elapse 1658 ticks (0.46 ms) (0.00 min) ...
===== Deque (ScopeAlloc) =====
---> Elapse 1100 ticks (0.31 ms) (0.00 min) ...

===== std::deque =====
---> Elapse 1691 ticks (0.47 ms) (0.00 min) ...
===== Deque (ScopeAlloc) =====
---> Elapse 1051 ticks (0.29 ms) (0.00 min) ...

===== std::deque =====
---> Elapse 1663 ticks (0.46 ms) (0.00 min) ...
===== Deque (ScopeAlloc) =====
---> Elapse 1058 ticks (0.30 ms) (0.00 min) ...

===== doShareAllocDeque =====
---> Elapse 1060 ticks (0.30 ms) (0.00 min) ...
===== doShareAllocDeque =====
---> Elapse 657 ticks (0.18 ms) (0.00 min) ...
===== doShareAllocDeque =====
---> Elapse 656 ticks (0.18 ms) (0.00 min) ...
===== doShareAllocDeque =====
---> Elapse 656 ticks (0.18 ms) (0.00 min) ...
===== doShareAllocDeque =====
---> Elapse 656 ticks (0.18 ms) (0.00 min) ...
Unless otherwise stated, the content of this page is licensed under Creative Commons Attribution-ShareAlike 3.0 License

Subscription expired — please renew

Pro account upgrade has expired for this site and the site is now locked. If you are the master administrator for this site, please renew your subscription or delete your outstanding sites or stored files, so that your account fits in the free plan.