STL有deque implementation,Boost deque implementation,但它们都使用了序列容器的STL方式(带有分配器的动态分配)。
我正在寻找一个可靠的、快速的、静态分配的deque实现。它看起来像这样:
template<typename T, unsigned int S>
class StaticDeque
{
T m_elements[S];
};所以所有元素都是静态分配的。
Note1:我已经有了基于STL的解决方案(使用为向量和deque静态分配数据的自定义分配器),但我正在寻找更好的解决方案(更短的执行时间)。
Note2:我需要静态分配的内存,因为我在内存中的预定义(快速访问)区域中处理数据。因此对象将像这样声明:#pragma DATA_SECTION("fast_memory") StaticDeque<int, 10> payloads;
发布于 2013-04-22 17:28:51
您可以使用Howard Hinnant的stack allocator,它通过modified allocator重用了现有的std::deque实现。您可以向分配器的构造函数提供任何内存,包括所谓的arena对象,它在堆栈上保存字符数组。您还可以使用包含堆上静态分配的内存块的arena对象,只需对arena类进行少量修改即可。
但是,请注意,目前它不是100%静态方案,因为当arena对象拥有的内存量耗尽时,将调用::operator new在堆上分配额外的内存。也许在具有运行时大小的数组的C++14中,这个问题可以减轻。目前,只需确保为您的std::deque预先分配和保留足够的内存(基于分析您的应用程序)。
优点是您可以将此分配器与任何STL容器一起使用,并且您可以只关注内存问题,而不必担心容器的正确性和效率。
https://stackoverflow.com/questions/16134057
复制相似问题