5

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

我正在寻找一种可靠、快速且静态分配的双端队列实现。看起来像这样:

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

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

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

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

4

1 回答 1

2

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

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

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

于 2013-04-22T09:28:50.963 回答