两篇关于stl容器性能比较的文章

STL container Benchmark

C++ benchmark – std::vector VS std::list VS std::deque

C++ benchmark – std::vector VS std::list


我们知道通常对于在序列中插入和删除频繁的操作,使用list会更快,而对于序列头尾插入频繁的操作,用deque会更快。vector对于查找来说会比较快,相对于前两种,vector对cache的利用率更高。

文中详细比较了不同的操作,有一定的参考意义。

有一点值得注意的是,random insert+linear search,list最慢(小数据块),原因应该还是cache miss,因为如果node被分配不同的内存块中,那么cache miss的几率会增加。


Data Oriented Design

在选择数据结构时,有一个重要的因素在传统的复杂度分析时通常不会考虑的是cache locality。一旦cache miss发生,处理器需要等待很多CPU周期才能从内存中取得数据,对于NUMA架构的处理器更是如此。所以,在设计数据结构时有一种叫dod,即Data Oriented Design的设计常常会使用,并且越来越受到重视。可以参考:

Pitfalls of Object Oriented Programming

注意,标题是OOP的缺陷,其实不是探讨OOP和面向过程等编程范式的,而是关于OOP对于性能的影响。下面还有一些DOD相关的文章可供参考:

Data-Oriented Design (Or Why You Might Be Shooting Yourself in The Foot With OOP)

Data-Oriented Design Now And In The Future

Intorduction to Data Oriented Design

DOD对于性能不敏感的模块意义不大(80/20原则),但是对于某些性能上要求较高的模块,那么就很重要了。


总之,优化是一门高深的学问。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值