首页 > 解决方案 > 固定分配 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,这是我试图摆脱的。

标签: c++embeddedallocation

解决方案


您可以实现或重用 boost 的static_vector具有固定容量的可变大小数组容器。


推荐阅读