dor*_*ron 5 c++ memory-management stl
我有一个我不断重用的STL容器(std :: list).我的意思是我
使用callgrind进行性能分析时,我看到大量的new
(malloc
)和delete
(free
)调用非常昂贵.因此,我正在寻找一些方法来优先预分配相当多的元素.我还希望我的分配池继续增加,直到达到高水位线,并且分配池继续挂起到内存,直到容器本身被删除.
不幸的是,标准分配器不断调整内存池的大小,所以我正在寻找一些能够完成上述操作的分配器,而不必自己编写.
这样的分配器是否存在,我在哪里可以找到这样的分配器?
我正在使用GCC和使用STLPort的Android工作.
编辑:放置new
是好的,我想要最小化的是堆行走,这是昂贵的.我也希望我的所有对象尽可能地彼此接近,以最大限度地减少缓存未命中.
听起来你可能只是使用了错误类型的容器:使用列表,每个元素占用一个单独的内存块,以允许单独的插入/删除 - 因此列表中的每个添加/删除都需要单独的new()/delete()
.
如果您可以使用std::vector
替代,那么您可以reserve
在添加项目之前获得所需的大小.
同样要删除,通常最好不要单独删除项目.只需调用clear()
容器即可清空.它.
编辑:您现在已经在评论中明确指出," 在处理过程中删除元素"步骤是从列表中间删除元素,并且不能使迭代器无效,因此切换到向量是不合适的.我现在就留下这个答案(为了评论帖子!)
分配器boost::fast_pool_allocator
设计用于std::list
.
该文件声称"如果您严重关注性能,请boost::fast_pool_allocator
在处理容器时使用,例如在处理容器时std::list
使用."boost::pool_allocator
std::vector
请注意,这boost::fast_pool_allocator
是一个单例,默认情况下它永远不会释放已分配的内存.但是,它是使用实现的boost::singleton_pool
,您可以通过调用静态函数boost::singleton_pool::release_memory()
和它来使其空闲内存boost::singleton_pool::purge_memory()
.
归档时间: |
|
查看次数: |
734 次 |
最近记录: |