多次分配内存是否一次性需要更多时间?
Does allocating memory multiple times takes more time in one go?
众所周知,序列容器(列表除外(的容量是在push_back
到其capacity
等于其size
的容器后实现定义的
。大多数编译器将保留更多的 momery,而不仅仅是分配一个尺寸并保持容量与大小相等。
所以我认为多次分配会花费更多时间。但除了检查bad_alloc
,还有其他原因吗?
让我们以std::vector
为例。 如果每次需要更多内存时仅分配少量内存,则存在两个主要问题:
分配后通常复制容器中的值。 如果有大量数据,或者值类型具有昂贵的复制(或移动(构造函数,则这可能很昂贵。
较小的分配可能会增加堆碎片,并且肯定会增加堆簿记开销。 除了可变成本(与分配大小成比例(之外,每个分配还有一个固定成本。
相关文章:
- C++为构建时间获取QDateTime的可靠方法
- 从持续时间构造std::chrono::system_clock::time_point
- 向量 <int> a {N, 0} 和 int arr a[N] = {0} 的时间复杂度有什么区别
- while循环中while循环的时间复杂度是多少
- 使用简单类型列表实现的指数编译时间.为什么
- 是否可以在编译时初始化数组,以便在运行时不会花费时间?
- 在已经使用Git的情况下减少编译时间
- 有没有一种方法可以创建一个带有哈希表的数据库,该哈希表具有恒定时间查找功能
- 如何将包含epoch时间的十六进制字符串转换为time_t
- 从文本文件中读取时钟时间和事件时间并进行处理
- 具有未知值时的时间复杂性
- 如何减少花费的时间
- C++在变量给定的指定时间内关闭电脑
- rcpp函数中的清理时间很长
- C++:floor unix时间戳到UTC月份
- 如何在c++中录制具有精确帧时间戳的视频
- 在两台机器之间进行时间戳的最佳c++chrono函数是什么
- KMP算法和LPS表构造的运行时间
- 为什么std::互斥需要很长的、非常不规则的时间来共享
- 多次分配内存是否一次性需要更多时间?