C++静态分配双端队列实现

You*_*usf 5 c++ embedded containers templates stl

STL有deque实现,Boost deque实现 ; 但是它们都使用STL方式的序列容器(使用分配器进行动态分配).

我正在寻找一个可靠,快速和静态分配的deque实现.看起来像这样:

template<typename T, unsigned int S>
class StaticDeque
{
   T m_elements[S];
};
Run Code Online (Sandbox Code Playgroud)

所以要静态分配所有元素.

注1:我已经有了基于STL的解决方案(使用静态分配向量和双端队列数据的自定义分配器),但我正在寻找更好的解决方案(更短的执行时间).

注2:我需要静态分配内存,因为我处理内存中预定义(快速访问)区域中的数据.所以对象将被声明为:#pragma DATA_SECTION("fast_memory") StaticDeque<int, 10> payloads;

Tem*_*Rex 2

您可以使用 Howard Hinnant 的堆栈分配器std::deque,它通过修改后的分配器重用现有的实现。您可以向分配器的构造函数提供任何内存块,包括所谓的 arena 对象,该对象在堆栈上保存字符数组。您还可以通过对 arena 类进行少量修改来使用包含堆上静态分配的内存块的 arena 对象。

但请注意,目前它不是 100% 静态方案,因为当 arena 对象持有的内存量耗尽时,::operator new将调用它在堆上分配额外的内存。也许在具有运行时大小数组的 C++14 中,可以缓解这种情况。目前,只需确保为您的应用程序预先分配并保留足够的内存std::deque(基于对应用程序的分析)。

优点是您可以将这个分配器与任何 STL 容器一起使用,并且您可以只专注于内存问题,而不必担心如何使容器正确且高效。