boost::pool_allocator需要八个静态库

boost::pool_allocator needs eight static libraries?

本文关键字:八个 静态 pool allocator boost      更新时间:2023-10-16

我试图从Boost库向我的项目添加相当有限的功能,即在"pool_allocator"类的帮助下为池中的小对象分配内存,并发现我需要向项目添加4个调试静态库文件和4个发布静态库文件的依赖关系。例如,像这样的一行需要8个库文件依赖项:

boost::container::vector<int, boost::pool_allocator<int> > v;

有没有一种方法可以在不链接到静态库的情况下使用这些类?(也许是模板参数的某种组合?)

我所读到的关于提升池的内容是:根本不要使用它。该库相当旧(在boost 1.54中,除了2010年编辑的pool_alloc.hpp之外,所有文件的版权都是2000和2001)。您可以在这里查找有关性能的问题(查找James Kanze的答案)。如果你只想使用boost,我建议你使用另一个库。如果您需要自定义分配器,请执行基准测试。

编辑:

来自池文档:

通常,当您需要更有效的方法来进行异常内存控制时,请使用池。

那么问题是什么是不寻常的记忆控制?它满足你记忆的特殊需要吗?Andrei Alexandrescu在"现代C++设计"中写到了内存分配,根据分配释放模式,可能会有非常不同的要求。但根据这篇论文,他不相信这是一个非常好的章节。

所以对我来说,最后一个问题是,对于内存管理问题,pool是否比std::allocater更好?你必须搞砸它。即使在池中实现了少量逻辑,在你的实现中也可能使用更有效的内存管理算法。顺便说一句,pool的一个bug是"Boost pool library it not header only as claim in documentation"。

识别boost所需的文件,并将它们单独添加到您的项目中,或者向您的项目添加一个.cpp,#include是所需的.cpp。(不推荐)

通过脚本生成项目文件,这样添加这样的依赖关系就很容易了。设置这个是一件痛苦的事,但拥有它是很棒的