首页 > 解决方案 > 一次分配内存是否需要更多时间?

问题描述

众所周知,一个序列容器(除了列表)的容量是在push_back一个容器之后实现定义的,它capacity等于它的size?

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

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

标签: c++

解决方案


让我们std::vector举个例子。如果每次需要更多内存时只分配少量内存,则会出现两个主要问题:

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

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


推荐阅读