c++ - 一次分配内存是否需要更多时间?
问题描述
众所周知,一个序列容器(除了列表)的容量是在push_back
一个容器之后实现定义的,它capacity
等于它的size
?
并且大多数编译器将保留更多的内存,而不是仅仅分配一个更多的大小并保持容量等于大小。
所以我认为多次分配会花费更多时间。但是除了检查bad_alloc
,还有其他原因吗?
解决方案
让我们std::vector
举个例子。如果每次需要更多内存时只分配少量内存,则会出现两个主要问题:
分配之后通常是复制容器中的值。如果有大量数据,或者值类型具有昂贵的复制(或移动)构造函数,这可能会很昂贵。
小的分配可能会增加堆碎片,并且肯定会增加堆簿记开销。除了可变成本(与分配大小成正比)外,每个分配都有一个固定成本。
推荐阅读
- asp.net-mvc - MVC 仅从 2 个控制器中选择指定的 id
- c# - 无法更新 mssql 中的小数字段
- android - 在 Android 上读取 x-json-stream
- java - 如何使用 ConstraintLayout 动态创建视图?(不工作)
- jquery - 如何从 JSON 答案在 jQuery 中创建 div 以显示数据?
- android - 在 intellij IDEA 中使用重构提取颤振小部件选项时颤振错误
- javascript - 将所有 javascript 索引增加(或减少)一个数字
- c# - 在 Xamarin Android 上完成多项活动
- javascript - 图案绘图在 Safari 中动态加载行为不端
- scala - Spark中Futures如何保证集群资源的有效利用