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

C++ statically allocated double ended queue implementation

本文关键字:队列 实现 静态 分配 c++      更新时间:2023-10-16

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

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

template<typename T, unsigned int S>
class StaticDeque
{
   T m_elements[S];
};

所有的元素都是静态分配的

注1:我已经有基于STL的解决方案(使用自定义分配器静态地为vector和deque分配数据),但我正在寻找任何更好的解决方案(更低的执行时间)。

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

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

但是请注意,目前它不是100%静态方案,因为当竞技场对象持有的内存量耗尽时,将调用::operator new来在堆上分配额外的内存。也许在c++ 14中使用运行时大小的数组可以减轻这个问题。目前,只需确保为std::deque预分配和保留足够的内存(基于对应用程序的分析)。

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