代码之家  ›  专栏  ›  技术社区  ›  Filipp

分配器是无状态的意味着什么?

  •  10
  • Filipp  · 技术社区  · 12 年前

    分配器是无状态的意味着什么?我意识到std::allocater是malloc的一个包装器,并且没有自己的状态。同时,malloc自己记账,所以可以说所有std::分配器实例都使用一个状态。

    我将如何在没有状态的情况下实现池分配器?如果不是分配器,什么会保持内存的当前状态?

    有人能正式定义国家在这种情况下的含义吗?

    2 回复  |  直到 12 年前
        1
  •  7
  •   Öö Tiib    6 年前

    State表示类的实例中有可变的信息。无状态意味着它们没有它。无状态类没有非静态数据成员。

    您可以通过使用某种对该类型的所有池分配器都相同的相互外部状态(池),使池分配器成为无状态的。

        2
  •  3
  •   TemplateRex    9 年前

    分配器对象本身不鼓励是有状态的。这意味着如果您创建 std::allocator (或您自己的),此实例不应包含任何关于已分配块等的信息-此信息必须是 static 并在所有人中共享 std::分配器 实例。违反此规则可能会导致STL库中出现未定义的行为。

    例如,看看 std::list::splice :它从一个元素中删除和间隔元素 std::list 并插入其他。实际上,对包含的元素没有任何操作(没有复制等)-此方法只是重新排列内部指针。所以,如果 std::分配器 实例#1(在列表#1中)知道某事,什么不知道 std::分配器 实例#2(在列表2中)?这些元素会丢失、内存泄漏、自发删除或其他什么。。

    Scott Meyers的《有效的STL》是关于STL的一本很好的读物