【发布时间】:2013-06-18 10:17:33
【问题描述】:
我有一个不断重复使用的 STL 容器 (std::list)。我的意思是我
- 将一些元素推入容器中
- 在处理过程中移除元素
- 清空容器
- 冲洗并重复很多次
在使用 callgrind 进行分析时,我看到大量对 new (malloc) 和 delete (free) 的调用,这可能非常昂贵。因此,我正在寻找一些方法来最好地预先分配相当多的元素。我还希望我的分配池继续增加,直到达到高水位线,并且分配池继续挂在内存上,直到容器本身被删除。
不幸的是,标准分配器会不断调整内存池的大小,因此我正在寻找一些无需我自己编写即可完成上述任务的分配器。
这样的分配器是否存在,我在哪里可以找到这样的分配器?
我在使用 GCC 的 Linux 和使用 STLPort 的 Android 上工作。
编辑:放置new 没问题,我想最小化的是堆行走,这很昂贵。我还希望我的所有对象都尽可能靠近,以尽量减少缓存未命中。
【问题讨论】:
-
new 和 delete 可能是容器中包含的对象析构函数和构造函数,这使得它在某种程度上不可避免
-
@fatih_k 但是,这仅在列表包含指向动态分配对象的指针时才成立。我相信 OP 可能知道要避免这种情况。
-
@Angew,对象的析构函数仅在包含的元素是对象而不是指针时才被调用。 std::container's 不获取指针的所有权
-
placement new 没问题,我只是想尽量减少对 malloc 和 free 的调用
标签: c++ memory-management stl