美文网首页
vector:push_back vs resize vs re

vector:push_back vs resize vs re

作者: gykimo | 来源:发表于2021-01-24 00:23 被阅读0次

    代码:
    https://github.com/gykimo/c_plusplus_optimize/tree/master/vector

    耗时结果:

    [case 1] vector_push_back:
    
    real    0m1.952s
    user    0m1.396s
    sys 0m0.433s
    
    ==========================
    [case 2] vector_resize:
    
    real    0m1.311s
    user    0m1.050s
    sys 0m0.144s
    
    ==========================
    [case 3] vector_ctor:
    
    real    0m1.305s
    user    0m1.051s
    sys 0m0.141s
    
    ==========================
    [case 4] vector_reserve:
    
    real    0m0.720s
    user    0m0.462s
    sys 0m0.142s
    
    ==========================
    

    说明

    ctor和resize

    这两个本质上是一样的,首先会分配好n个内存,另外,还会调用TestClass的构造函数创建n个TestClass对象;

    reserve

    总体性能最好。
    sys耗时和resize一样,因为两者都是只调用一次内存分配。
    usr耗时远低于resize,是因为reserve只分配内存,但是不会提前创建n个TestClass对象,所以usr耗时少。

    push_back

    sys性能最差,主要是vector开始先分配少量内存,在push_back过程中,当内存不够时,会重新分配内存,所以sys的耗时最多。
    user的性能也最差,虽然push_back理论上调用的构造函数数量和reserve的一样多,但是但是实际情况却远远高于reserve,是因为当增加内存时,如果原内存位置无法创建需要的长度,那么会在新位置上创建内存,然后把原内存的TestClass对象都拷贝到新位置上。

    相关文章

      网友评论

          本文标题:vector:push_back vs resize vs re

          本文链接:https://www.haomeiwen.com/subject/jkmpzktx.html