当前位置:  开发笔记 > 编程语言 > 正文

vector <> with static memory而不是dynamic allocation

如何解决《vector<>withstaticmemory而不是dynamicallocation》经验,为你挑选了1个好方法。

我正在开发一个嵌入式应用程序,我喜欢使用像这样的容器std::vector<>.不幸的是我不能使用堆.所以std::vector<>无法使用.所以我正在寻找替代方案.

我见过提升,static_vector但就我所见,升压方法对于微控制器来说似乎太重了.或者是否有使用小型微控制器上升压的经验(例如只有static_vector?)

可以做出一个假设:在整个应用程序运行时期间的最大条目数在编译时是已知的.

所以我想知道是否有任何开源解决方案,或者我是否必须自己实现一个基于实现的容器,std::array<>并添加一些逻辑来启用以下操作:

在运行时期间添加(push_back())和remove(erase())元素.提供典型的容器迭代器和随机访问.还for ( : )应该提供短手循环.

所以我的天真方法是:

提供迭代器和随机访问对我来说似乎很容易,而且应该主要基于std::array<>函数

某些逻辑应该添加add(push_back)和remove(erase)应该没有问题.

但是如何for ( : )实现循环支持?

还有其他我需要考虑的事情吗?

Tommy Anders.. 7

您可以std::vector使用自定义创建一个自定义std::allocator,例如从静态缓冲区返回指针.

重读你的问题,你说容器内的条目总数在编译时是已知的,为什么不使用std::array当时甚至是一个好的老式数组呢?

至于基于loop(for ( : ))的范围,它只需要为类型定义beginend成员或自由函数,因此如果你创建自己的类型,则需要定义它们.



1> Tommy Anders..:

您可以std::vector使用自定义创建一个自定义std::allocator,例如从静态缓冲区返回指针.

重读你的问题,你说容器内的条目总数在编译时是已知的,为什么不使用std::array当时甚至是一个好的老式数组呢?

至于基于loop(for ( : ))的范围,它只需要为类型定义beginend成员或自由函数,因此如果你创建自己的类型,则需要定义它们.


@Andreas这是一个自定义分配器的例子,它接近你正在寻找的东西(它可以做多一点,但你可以简化它以满足你的需要)https://howardhinnant.github.io/stack_alloc.html
推荐阅读
携手相约幸福
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有