Boost.Container `dlmalloc` 和 `jemalloc`

Posted

技术标签:

【中文标题】Boost.Container `dlmalloc` 和 `jemalloc`【英文标题】:Boost.Container `dlmalloc` and `jemalloc` 【发布时间】:2020-06-10 09:19:34 【问题描述】:

我已经在我的项目中引入了 Boost.Container,它使用 jemalloc 作为默认分配器,看起来 Boots.Container 使用自定义分配器 dlmalloc,当然在链接时我在“多重定义”链接上失败了错误,因为两个“XXXalloc”被引入目标文件。关闭“jemalloc”不是一种选择,但我找不到是否可以关闭dlmalloc 的使用。知道如何解决这个问题吗?

【问题讨论】:

【参考方案1】:

实际上,Boost Container 99% 仅是标头。

文档将 DLMalloc 扩展列为扩展:https://www.boost.org/doc/libs/1_73_0/doc/html/container/extended_allocators.html

这意味着您显然选择了扩展分配器。如果这不是您想要的,您知道要删除什么。

一个很好的提示是当您不需要链接 Boost Container 时,因为对导出的符号的快速检查除了分配器之外没有显示任何我能识别的东西。

【讨论】:

其实我没选,感觉默认是用的。仍然不确定,构建需要很长时间,但感觉它与USE_DL_PREFIXdefine 有关 好的,看起来定义USE_DL_PREFIX 成功了。我说得对吗,您的默认构建(显然)已默认定义?你是使用bjam 构建的吗? 到目前为止,我从来不需要链接库,我只是检查了在使用那些扩展分配器示例时我必须链接。那就是选择加入! (但如果USE_DL_PREFIX 可以以某种方式解决您的问题,请发布答案。) 啊哈!找到了,项目中使用了monotonic_buffer_resource,所以,在这种情况下,必须构建和链接库。我想当 Boost.Container 不用作“仅标题”库时,这种情况非常罕见。不想弄乱它并检查我是否可以从构建中排除分配器,我会坚持定义。

以上是关于Boost.Container `dlmalloc` 和 `jemalloc`的主要内容,如果未能解决你的问题,请参考以下文章

.select_on_container_copy_construction 左侧的 C++ boost::container::vector 必须具有类/结构/联合

Boost::multi_index_container 具有不同的键和元素类型

boost::container::allocator_traits::is_partially_propagable 是啥意思?

boost::multi_index_container 带有 random_acces 和 hashed_unique

Boost.Container flat_map 和 std::string_view

dlmalloc 2.8.6 源代码具体解释