一次分配内存是否会花费更多时间?

时间:2018-06-24 05:43:17

标签: c++

众所周知,序列容器(列表除外)的容量是在push_back之后实现到其capacity等于其size的容器之后实现的?

大多数编译器将保留更多的内存,而不仅仅是分配更多的大小并保持容量等于大小。

因此,我认为多次分配将花费更多时间。但是除了检查bad_alloc之外,还有其他原因吗?

1 个答案:

答案 0 :(得分:3)

我们以std::vector为例。如果每次需要更多内存时仅分配少量内存,则有两个主要问题:

  1. 通常在分配之后复制容器中的值。如果存在大量数据,或者值类型具有昂贵的副本(或移动)构造函数,则这可能会很昂贵。

  2. 小的分配可能会增加堆碎片,并且肯定会增加堆簿记开销。除可变成本(与分配大小成比例)外,每个分配都有固定成本。