1.[stl 源码分析] std::list::size 时间复杂度
[stl 源码分析] std::list::size 时间复杂度
在对Linux上C++项目进行性能压测时,码分一个意外的码分发现是std::list::size方法的时间复杂度并非预期的高效。原来,码分这个接口在较低版本的码分星加坡双赢科技源码g++(如4.8.2)中是通过循环遍历整个列表来计算大小的,这导致了明显的码分性能瓶颈。@NagiS的码分阻速线源码提示揭示了这个问题可能与g++版本有关。
在功能测试阶段,码分CPU负载始终居高不下,码分通过火焰图分析,码分std::list::size的码分调用占据了大部分执行时间。火焰图的码分使用帮助我们深入了解了这一问题。
查阅相关测试源码(源自cplusplus.com),码分在较低版本的码分521代挂网源码g++中,std::list通过逐个节点遍历来获取列表长度,码分这种操作无疑增加了时间复杂度。码分然而,tc大漠后台源码对于更新的g++版本(如9),如_glibcxx_USE_CXX_ABI宏启用后,list的个性名片psd源码实现进行了优化。它不再依赖遍历,而是利用成员变量_M_size直接存储列表大小,从而将获取大小的时间复杂度提升到了[公式],显著提高了性能。具体实现细节可在github上找到,如在/usr/include/c++/9/bits/目录下的代码。