VC2010 STL 与 STLport 性能比较
来源:互联网 发布:网络心理误区 编辑:程序博客网 时间:2024/06/07 23:43
今天对 VC2010 的 STL 和 STLport 的性能进行了一下简单的比较,测试结果如下:
测试容器DEBUGRELEASESTLportVC2010STLportVC2010启用 _STLP_DEBUG 参数不启用 _STLP_DEBUG 参数vector6.7802.5800.8673.4802.547list4.7501.0871.5971.7301.917deque6.4332.3301.7402.6602.170set4.9801.1370.6031.9201.903map9.2802.1931.0203.8133.847总用时32.2179.3235.85013.60712.390注:每个测试执行 3 次取平均值;由于 DEBUG 版和 RELEASE 版性能差异较大,故使用了不同的测试参数,具体看下面的代码;_STLP_DEBUG 参数是 STLport 特有的参数,主要是启用 DEBUG 模式下的检查功能,所以性能是最低的。
从测试结果可以看出 VC2010 的性能比以前提高不少,基本和 STLport 差不多了,甚至更有过之。估计主要得益于 C++0x 的右值引用新特性,具体可以看这里。
由于测试比较简单,只是进行了容器的元素添加、排序、移除等简单操作(具体代码看下面),所以测试不一定很准确,只能作为一个简单的参考,不能作为专业的结论。如果发现有什么问题,欢迎与我交流。
另外,测试中使用了随机数也会影响测试结果,但是理论上只要测试的数量多的话,这个影响是可以忽略的。而且代码中没有使用 srand() 初始化随机数序列,所以测试中使用的随机数序列应该是一致的,所以影响应该也是可以忽略的。
测试环境如下:
Pentium Dual-Core CPU E5200 2.5GHz, 2GB 内存
Windows XP Professional Service Pack 3
测试代码如下:
vector:
void VectorTest::DoRun(){vector<string> v;v.reserve(TEST_CONTAINER_SIZE);for (size_t i = 0; i < TEST_CONTAINER_SIZE; ++i){v.push_back(GetRandomString());}sort(v.begin(), v.end());for (size_t i = 0; i < TEST_CONTAINER_SIZE / 100; ++i){vector<string>::iterator it = v.begin() + rand() % v.size();v.erase(it);}}
list:
void ListTest::DoRun(){list<string> l;for (size_t i = 0; i < TEST_CONTAINER_SIZE; ++i){l.push_back(GetRandomString());}l.sort();for (size_t i = 0; i < TEST_CONTAINER_SIZE; ++i){string s = l.front();l.pop_front();}}
deque:
void DequeTest::DoRun(){deque<string> d;for (size_t i = 0; i < TEST_CONTAINER_SIZE; ++i){d.push_back(GetRandomString());}sort(d.begin(), d.end());for (size_t i = 0; i < TEST_CONTAINER_SIZE; ++i){string s = d.front();d.pop_front();}}
set:
void SetTest::DoRun(){typedef set<string> Set;Set s;for (size_t i = 0; i < TEST_CONTAINER_SIZE; ++i){pair<Set::iterator, bool> p = s.insert(GetRandomString());}for (size_t i = 0; i < TEST_CONTAINER_SIZE / 10; ++i){Set::iterator it = s.lower_bound(GetRandomString());if (it != s.end()){s.erase(it);}}}
map:
void MapTest::DoRun(){typedef map<string, string> Map;Map m;for (size_t i = 0; i < TEST_CONTAINER_SIZE; ++i){pair<Map::iterator, bool> p = m.insert(make_pair(GetRandomString(), GetRandomString()));}for (size_t i = 0; i < TEST_CONTAINER_SIZE / 10; ++i){Map::iterator it = m.lower_bound(GetRandomString());if (it != m.end()){m.erase(it);}}}
其中 GetRandomString() 如下:
string TestBase::GetRandomString(){string randomString(rand() % TEST_STRING_MAX_SIZE, '\0');generate(randomString.begin(), randomString.end(), rand);return randomString;}
测试参数如下:
DEBUG:
const size_t TEST_CONTAINER_SIZE = 10000;const size_t TEST_STRING_MAX_SIZE = 1024;
RELEASE:
const size_t TEST_CONTAINER_SIZE = 100000;// DEBUG 版的 10 倍const size_t TEST_STRING_MAX_SIZE = 1024;
- VC2010 STL 与 STLport 性能比较
- 一个stlport 与vs自带stl的生动事例
- STL各个容器性能比较
- C++库:STL、Boost、STLport
- STLport和Dinkumware STL区别
- 用c++封装一个Hash Table,并与STL map 进行操作性能上的比较
- STL容器 vector,list,deque 性能比较
- STL容器 vector,list,deque 性能比较
- STL map 、PHP HashTable、hash_map 性能比较
- STL容器 vector,list,deque 性能比较
- STL容器 vector,list,deque 性能比较
- vc2010 与 manifest
- STLport
- 2010新版STL修订内容(VC2010)
- 泛型的Binary Search Tree的实现,并与STL map进行操作性能上的比较
- 扩展封装暴雪哈希算法(blizard hash algorithm),并与STL map进行操作性能上的比较
- BufferedOutputStream与FileWriter性能比较
- WaitForSingleObject 与 EnterCriticalSection 性能比较
- Java Properties文件的读写
- find命令查找包含指定内容的文件
- surf匹配流程。。。
- [System.ComponentModel.DataObject]
- c++简单的学生管理系统----继承练习
- VC2010 STL 与 STLport 性能比较
- SQL2008报错“请验证实例名称是否正确并且SQL Server已配置为允许远程连接”
- 系统管理员设置了系统策略 禁止此运行
- 用比自己厉害的人,可能吗?
- 《Pro ASP.NET MVC 3 Framework》译文目录
- usaco overfencing
- 其实我是一只风筝
- .bash_profile和.bashrc的什么区别
- CListCtrl控件主要事件及LVN_ITEMCHANGED消息和鼠标双击列表项事件的处理