加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

哪些C std兼容自定义分配器可用?

发布时间:2020-12-16 07:00:24 所属栏目:百科 来源:网络整理
导读:我想以从std :: allocator派生的类的形式使用一些符合C std的内存管理,但是能够分配内存块并释放将它们放在较小的部分中.我只找到了boost :: pool,但是在上面的意义上这不符合标准.有什么更有用的,或者我自己编码吗? (注意,std :: allocator通常用于分配许
我想以从std :: allocator派生的类的形式使用一些符合C std的内存管理,但是能够分配内存块并释放&将它们放在较小的部分中.我只找到了boost :: pool,但是在上面的意义上这不符合标准.有什么更有用的,或者我自己编码吗?

(注意,std :: allocator通常用于分配许多小对象,即使用std :: list时.)

编辑澄清.

说,我想使用许多小对象的std :: list,然后std :: allocator的实现使用:: new分配每个对象会导致运行时的显着开销(但我认为也是内存).分配大块对象并逐个分发它们会更有效率.为此,我需要一个符合标准的分配器(不需要从std :: allocator派生,但必须实现相同的概念),可以与任何std库容器一起使用并提供所需的内存管理,理想情况下允许我告诉它我可能单独分配多少个对象.

解决方法

GCC提供了一些 extension allocators作为std :: allocator的替代品.

你还没有真正说出你的要求是什么,所以不可能说它们中的任何一个是否适合你.

编辑以下OP编辑:

Say,I want to use a std::list of many small objects,then implementations of std::allocator which allocate each object using ::new cause significant overhead in run time (but also memory I think).

为什么还要记忆?无论内存来自新的还是自定义分配器,每个std :: list节点中的附加指针的开销都将存在.你只是意味着由堆完成的簿记来跟踪所有的小型分配吗?

It is much more efficient to allocate big chunks of objects and hand them out one by one.

你测量过吗?

如果您不希望分配大量单独节点的开销,您确定std :: list是正确的容器吗? vector或deque怎么样?

boost :: stable_vector仍然是基于节点的,但每个节点的内存开销比std :: list少.

boost :: flat_map< int,T>不是基于节点的,可以用来代替std :: list< T>

分配器很棘手,并不总是(真实或感知)问题的最佳答案.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读