首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C++静态分配的双端队列实现

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

Stack Overflow用户
提问于 2013-04-22 01:28:18
回答 1查看 1.2K关注 0票数 5

STL有deque implementation,Boost deque implementation,但它们都使用了序列容器的STL方式(带有分配器的动态分配)。

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

代码语言:javascript
复制
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;

EN

回答 1

Stack Overflow用户

发布于 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容器一起使用,并且您可以只关注内存问题,而不必担心容器的正确性和效率。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16134057

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档