【问题标题】:Is there an elegant C++ implementation of fixed-size allocator?是否有固定大小分配器的优雅 C++ 实现?
【发布时间】:2013-01-05 12:18:45
【问题描述】:

如果必须包含的头文件数量尽可能少,我认为 C++ 库是“优雅的”。

我知道已经存在固定大小的分配器,例如 Loki::SmallObjectAllocatorboost::pool。虽然两者都很优秀,但我认为它们并不优雅,也不容易无缝集成到项目中。

大多数时候,我只需要 boost 库的一小部分,但我必须在我的机器上安装整个库。例如,如果我想使用 boost::pool,我希望只包含 ONE 头文件boost_pool.h 并且工作完成。因为我认为固定大小的分配器不应该如此依赖于太多其他组件。在我看来,理想的代码应该如下所示:

#include <boost_pool.h>

int main()
{
   boost::pool<int> p;
   int* v = p.allocate();
}

有这样的图书馆吗?

【问题讨论】:

  • 你看过bcp吗?不完全相同,但它可以很容易地用作将所有内容推入单个标题的起点。
  • "我希望只包含一个头文件boost_pool.h" - 那么,做一次工作并将所有相关的东西放在那里吗?说真的。
  • 似乎您可以在很久以前安装 boost,但是您只需要一件事,并且您认为不值得付出努力。每次你需要提升的东西时都是一样的。大概,是时候安装它了?
  • 您正在寻找的词可能是“独立”而不是“优雅”。 Boost 以不同的方式看待“优雅”——代码在不同的 Boost 组件之间共享,而不是被需要做同样事情的每个组件复制。结果当然是 Boost 内部的依赖关系。
  • @AndyT:当然,Boost 中一些常用的东西在不同平台上的定义不同。我很确定您可以编写一个池分配器(就此而言,有很多 Boost 功能),而无需繁重的平台隔离层。但是,一旦您获得一个功能齐全的平台隔离层,您通常会使用它,而不是重新实现每个组件所需的少量平台隔离。同样,对于像 BOOST_FOREACH 这样的便利工具,一旦你拥有它们,你就不会为了让你的 boost 组件更加独立而避免使用它们。

标签: c++ performance object memory-management c++11


【解决方案1】:

欢迎您来到mine。优雅与否,你可以决定。但它只是一个短标题,依赖于几个小的标准标题。分配器满足 C++11 分配器要求,这是 C++03 分配器要求的子集。如果需要,您可以随时添加 C++03 样板。

【讨论】:

  • Windows 用户注意事项:请注意,有状态分配器在 Visual C++ 2012 年 11 月 CTP 下的调试模式下尚不能工作。有一些调试检查使用Allocator::construct 而不是std::allocator_traits&lt;Allocator&gt;::construct
【解决方案2】:

您在使用 GCC 吗?它的标准库带有一些固定大小的分配器作为扩展,请参阅http://gcc.gnu.org/onlinedocs/libstdc++/manual/memory.html#allocator.ext

它们相当独立(不确定优雅,我已经很久没有正确查看它们的代码了)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-10-28
    • 1970-01-01
    • 1970-01-01
    • 2011-02-28
    • 1970-01-01
    • 2011-02-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多