vector:push_back vs resize vs re
2021-01-24 本文已影响0人
gykimo
代码:
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对象都拷贝到新位置上。