我试图从 Boost 库中向我的项目添加相当有限的功能,即在“pool_allocator”类的帮助下为池中的小对象分配内存,并发现我需要将项目依赖项添加到 4 个调试静态库文件和 4 发布静态库文件。即单行需要 8 个库文件依赖项,如下所示:
boost::container::vector<int, boost::pool_allocator<int> > v;
有没有办法在不链接到静态库的情况下使用这些类?(可能是模板参数的某种组合?)
我试图从 Boost 库中向我的项目添加相当有限的功能,即在“pool_allocator”类的帮助下为池中的小对象分配内存,并发现我需要将项目依赖项添加到 4 个调试静态库文件和 4 发布静态库文件。即单行需要 8 个库文件依赖项,如下所示:
boost::container::vector<int, boost::pool_allocator<int> > v;
有没有办法在不链接到静态库的情况下使用这些类?(可能是模板参数的某种组合?)
我所读到的关于 boost pool 的全部内容是:根本不要使用它。该库相当旧(在 boost 1.54 中,所有文件的版权均为 2000 和 2001,除了 pool_alloc.hpp,它于 2010 年编辑)您可以在此处查找有关性能的问题(查找 James Kanze 的答案)。如果您只想使用 boost,我建议您使用另一个库。如果您需要自定义分配器,请进行基准测试。
编辑:
来自池文档:
通常,当您需要一种更有效的方法来进行异常内存控制时,请使用池。
那么问题是什么是异常内存控制?它是否满足您对记忆的特殊需求? Andrei Alexandrescu在“Modern C++ Design”中写过关于内存分配的文章,根据分配和释放模式,可能会有非常不同的要求。但根据这篇论文,他并不相信这是一个非常好的章节。
所以对我来说,最后一个问题是,对于内存管理问题,池是否比 std::allocator 更好?你必须弄乱它。即使在池中实现了很少的逻辑,也可能在您的实现中使用更有效的内存管理算法。顺便说一句,池的错误之一是“Boost pool library it not header only as claim in documentation”。
识别 boost 所需的文件,并将它们单独添加到您的项目中,或者将 .cpp 添加到您的项目中,#include 是所需的 .cpp。(不是很推荐)
或者
通过脚本生成项目文件,以便轻松添加此类依赖项。设置它很痛苦,但拥有它很棒