众所周知,序列容器(列表除外)的容量是在push_back
之后实现到其capacity
等于其size
的容器之后实现的?
大多数编译器将保留更多的内存,而不仅仅是分配更多的大小并保持容量等于大小。
因此,我认为多次分配将花费更多时间。但是除了检查bad_alloc
之外,还有其他原因吗?
答案 0 :(得分:3)
我们以std::vector
为例。如果每次需要更多内存时仅分配少量内存,则有两个主要问题:
通常在分配之后复制容器中的值。如果存在大量数据,或者值类型具有昂贵的副本(或移动)构造函数,则这可能会很昂贵。
小的分配可能会增加堆碎片,并且肯定会增加堆簿记开销。除可变成本(与分配大小成比例)外,每个分配都有固定成本。