gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:44:50 25 4
gpt4 key购买 nike

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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com