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对象都拷贝到新位置上。

上一篇下一篇

猜你喜欢

热点阅读