代码之家  ›  专栏  ›  技术社区  ›  Danra Bathsheba

C++算法堆分配保证

  •  2
  • Danra Bathsheba  · 技术社区  · 8 年前

    对于标准算法的非执行策略重载,C++标准中是否有任何保证不进行免费存储(即堆)分配?

    我正在进行实时处理,并希望使用,例如。, std::max_element ,但我不能保证它不会在堆上分配。这是有道理的,它没有,但我没有看到任何地方指定。也许我遗漏了一些可以保证这一点的一般条款?

    2 回复  |  直到 8 年前
        1
  •  1
  •   Dietmar Kühl    8 年前

    该标准禁止任何算法分配内存。由于了解算法是否分配内存可能有用/必要,因此省略本规范可能被视为一个缺陷(我认为在这个主题上没有突出的缺陷)。指定哪些算法不允许分配内存应该不会太糟糕,只要这些分配只涵盖算法本身的操作,而不是对其参数的操作:算法 也许 使用可能需要内存分配的对象副本。

    理论上可以想象,一些算法可能受益于临时缓冲区,并可以分配内存。然而,在实践中,有一些算法可以做到这一点(例如。, rotate() 可以从分配内存中受益)。算法如 std::max_element() 虽然未指定不分配内存,但不会分配内存。

        2
  •  0
  •   Danra Bathsheba    8 年前

    我没有发现直接提到这种保证。然而 cppreference 提到没有例外 std::max_element 对于非执行策略重载。

    注意,它确实提到了一个 std::bad_alloc 对于执行策略重载。

    如果此信息正确,则这意味着非执行策略重载无法在堆上分配内存(否则它们可能引发 bad::alloc ).