gpt4 book ai didi

c++ - 我可以使用 boost 池作为存储来支持 boost 侵入式收集吗?

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

我理解 boost 侵入式集合最终存储对对象的引用,因此对象需要自己的生命周期管理。

我想知道我是否可以简单地使用 boost 池来管理该生命周期。当我想在 boost 侵入列表中存储一个新对象时,我可以从 boost 池中分配一个对象并将其存储在列表中吗?然后,当我从列表中删除时,我会使用 boost 池解除分配。

最佳答案

答案是肯定的。

也不是很典型。

如果您想控制分配内存的时间位置,您可以使用池。

如果您想分离数据结构的内存布局及其语义,您可以使用侵入式容器。

所以,有一个最佳点,但它看起来更像:

  • 用侵入式 Hook 装饰元素类型(例如用于侵入式 map )
  • 您在某种类型的“最佳”内存布局中创建新元素(这很可能是 vector<MyElement, custom_allocator> )

宽松的评论:

  • then when I delete from the list then I deallocate using boost pool

    使用池的一个典型场景是当您想要/不/必须释放元素时(当心非平凡的析构函数)。否则,您只是将本地堆的低效率转移到池(碎片,锁定)

  • the objects need their own lifetime management

    这听起来有点不对劲。事实上,对象不需要有“自己的”生命周期管理。只是它们的生命周期不受它们参与的侵入式数据结构的支配。

    例如通过将所有元素存储在一个 vector 中,您可以获得连续存储,并且所有元素的生命周期都由 vector [1] 控制。因此,您可以将元素生命周期和分配与容器语义分离


[1] 任何围绕 vector 重新分配的问题通常都可以通过预先预留足够的容量来避免。如果这样做,您会意识到这与固定大小的池分配器非常相似,但增加了零碎片的保证。如果你不需要后者,你可以做 list<T, pool_allocator<T> >因此您可以获得引用的位置,但可以在插入/删除时获得稳定的引用。等等等等

关于c++ - 我可以使用 boost 池作为存储来支持 boost 侵入式收集吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25917877/

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