首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    【C++】vector的底层剖析以及模拟实现

    vector是表示可变大小数组的序列容器。 就像数组一样,vector也采用的连续存储空间来存储元素。也就是意味着可以采用下标对vector的元素 进行访问,和数组一样高效。但是又不像数组,它的大小是可以动态改变的,而且它的大小会被容器自动处理。vector会分配一些额外的空间以适应可能的增长,因为存储空间比实际需要的存 储空间更大。不同的库采用不同的策略权衡空间的使用和重新分配。但是无论如何,重新分配都应该是对数增长的间隔大小,以至于在末尾插入一个元素的时候是在常数时间的复杂度完成的。与其它动态序列容器相比(deque, list and forward_list), vector在访问元素的时候更加高效,在末 尾添加和删除元素相对高效。对于其它不在末尾的删除和插入操作,效率更低。

    01

    [x86][gcc]PAUSE指令在Skylake上引起的性能问题

    前言: docker部署的相同的业务,Host OS也是相同的版本,但是一段代码跑在E5-2630 v4和Gold 5118上,性能却相差很多。业务在在Gold 5118上,QPS下降到了E5-2630 v4的三分之一左右,而且CPU使用率更高。 Gold 5118是Products formerly Skylake系列,E5-2630 v4是Products formerly Broadwell 系列。按理说,Skylake是更新的架构,性能应该更好才对,然而实际表现却并非如此。 分析: 1,perf 在两台机器分别执行perf,发现在5118上,有些不同的地方,libgomp中出现了热点。 先用md5sum确认两个so是否出现了差异,结果是相同的。 因为libgomp被strip过,所以没有对应的symbol,perf只能拿到热点的IP:0xfc79。 使用#objdump -D得到disassembly code,如下

    04
    领券