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

时间:2013-04-21 17:28:18

标签: c++ templates stl embedded containers

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

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

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

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

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

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

1 个答案:

答案 0 :(得分:2)

你可以使用Howard Hinnant的stack allocator,它使用modified allocator重用现有的std::deque实现。你可以为分配器的构造函数提供任何内存,包括一个所谓的arena对象,它在栈上保存一个chars数组。您还可以通过对竞技场类的一个小修改,在堆上使用包含静态分配的内存块的竞技场对象。

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

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