多次分配内存是否一次性需要更多时间?

Does allocating memory multiple times takes more time in one go?

本文关键字:时间 一次性 分配 内存 是否      更新时间:2023-10-16

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

。大多数编译器将保留更多的 momery,而不仅仅是分配一个尺寸并保持容量与大小相等。

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

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

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

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