c++ - 固定分配 std::vector
问题描述
我是一名嵌入式软件开发人员,因此我不能总是使用所有不错的 C++ 功能。最困难的事情之一是避免动态内存分配,因为它在某种程度上适用于所有 STL 容器。
然而std::vector
,在处理可变数据集时非常有用。但问题是分配(例如std::reserve
)不是在初始化时完成或固定的。这意味着发生复制时可能会发生内存碎片。
最好让每个向量都有一个分配的内存空间,这是向量可以增长到的最大大小。这将创建确定性行为,并可以在编译时映射微控制器的内存使用情况。调用push_back
向量何时达到其最大大小将创建一个std::bad_alloc
.
我已经读过std::allocator
可以编写一个替代版本来创建新的分配行为。是否有可能创建这种行为,std::allocator
或者替代解决方案是否更合适?
我真的很想继续使用 STL 库并对其进行修改,而不是重新创建我自己的向量,因为我比它们的实现更容易出错。
旁注#1:
我不能std::array
用作 1:它不是由我的编译器提供的,2:它确实有一个静态分配,但我仍然必须管理我的数据和std::array
. 这意味着用我的分配属性重写 a std::vector
,这是我试图摆脱的。
解决方案
您可以实现或重用 boost 的static_vector;具有固定容量的可变大小数组容器。
推荐阅读
- android - Android Webview:无需重新加载网页即可导航
- java - (Java) 使用 for 循环创建数组列表的排列
- android - 在回收器适配器中设置 clicklistener 以从 firebase 下载视频
- python - 使用 pythonSDK 停止 OpenStack 服务器实例
- javascript - 在返回函数上使用 mixin 函数,而不是函数的值
- sql-server - 如何在 Python 中使用 varbinary 解析原生格式的 BCP 输出文件
- .net-core - '忽略'串行连接上的 DTR
- python - 我的列表框不显示 Treeview 小部件
- c# - 如何从普通数组创建可观察对象?
- python - 如何在 Azure 上部署烧瓶 Rest-API(以图像为输入参数)