C ++算法堆分配保证

时间:2017-12-13 10:56:16

标签: c++ algorithm language-lawyer

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

我正在进行实时处理,并希望使用例如std::max_element,但我没有看到任何关于它不在堆上分配的保证。它没有意义,但我没有看到任何地方指定。也许我错过了一些保证这一点的一般条款?

2 个答案:

答案 0 :(得分:1)

该标准禁止任何算法分配内存。由于知识算法是否分配存储器可能是有用/必要的,因此省略该规范可能被视为缺陷(我不认为该主题存在明显的缺陷)。指定哪些算法不允许分配内存不应该太糟糕,只要很明显这些分配只涵盖算法自己的操作而不是对其参数的操作:算法可以使用反过来可能需要内存分配的对象。

理论上可以想象一些算法可以从临时缓冲区中受益并且可以分配内存。但是,实际上有一些算法会这样做(例如,rotate()可以从分配内存中受益)。像std::max_element()这样的算法虽然没有指定,但不会分配内存。

答案 1 :(得分:0)

我没有直接提到这种保证。但是,cppreference提到std::max_element对于非执行策略重载没有异常。

请注意,它确实提到了std::bad_alloc执行策略重载。

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