std::deque vs Deque
概要
本文比较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) ...
page revision: 3, last edited: 12 Aug 2010 06:34