gpt4 book ai didi

c++ - 有哪些符合 C++ 标准的自定义分配器可用?

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:19:12 25 4
gpt4 key购买 nike

我想以从 std::allocator 派生的类的形式使用一些符合 C++ std 的内存管理,但能够分配内存块并释放和释放它们的较小部分。我只找到了 boost::pool,但这在上述意义上不符合标准。周围有什么更有用的东西吗?还是我必须自己编写代码?

(请注意,std::allocator 通常无法分配许多小对象,即在使用 std::list 时。)

编辑以澄清。

说,我想使用许多小对象的 std::list,然后是 std::allocator 的实现,它使用 ::分配每个对象: new 会导致运行时的大量开销(我认为还有内存)。分配大块对象并将它们一个一个地分发会更有效率。为此,我需要一个符合 std 的分配器(不需要从 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 中额外指针的开销内存是否来自new 节点将存在或自定义分配器。您的意思是指由堆完成的簿记以跟踪所有小的所有涂层吗?

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

你测过吗?

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

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

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

分配器很棘手,并不总是解决(实际或感知到的)问题的最佳答案。

关于c++ - 有哪些符合 C++ 标准的自定义分配器可用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11116982/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com