STL 有 deque implementation , 升压 deque implementation ;但是他们都使用了序列容器的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 的 stack allocator它使用 modified allocator 重用现有的 std::deque
实现.您可以向分配器的构造函数提供任何一 block 内存,包括一个所谓的 arena 对象,它在堆栈上保存一个字符数组。您还可以通过对 arena 类进行少量修改,使用包含堆上静态分配的内存片的 arena 对象。
但是请注意,目前它不是 100% 静态方案,因为当 arena 对象拥有的内存量耗尽时,将调用 ::operator new
以在堆。也许在 C++14 中使用运行时大小的数组可以减轻这种情况。目前,只需确保为您的 std::deque
预分配和保留足够的内存(基于对您的应用程序的分析)。
优点是您可以将此分配器与任何 STL 容器一起使用,并且您可以只专注于内存问题,而不必担心容器是否正确和高效。
关于C++静态分配双端队列实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16134057/