固定分配std :: vector

时间:2019-07-08 12:25:08

标签: c++ embedded allocation

我是嵌入式软件开发人员,因此,我不能总是使用所有不错的C ++功能。最困难的事情之一是避免动态内存分配,因为动态内存分配在所有STL容器中普遍存在。

std::vector在处理可变数据集时非常有用。不过,问题在于分配(例如std::reserve)在初始化或固定时未完成。这意味着在复制时可能会发生内存碎片。

最好让每个向量都有一个分配的内存空间,该空间是向量可以增长到的最大大小。这将产生确定性的行为,并有可能在编译时映射微控制器的内存使用情况。在向量达到其最大大小时调用push_back会创建一个std::bad_alloc

我已阅读到可以编写std::allocator的替代版本来创建新的分配行为。是否可以使用std::allocator来创建这种行为,或者替代解决方案更合适?

我真的很想继续使用STL库并对其进行修改,而不是重新创建自己的向量,因为我比他们的实现更容易犯错误。

边注1:

我不能将std::array用作1:编译器未提供它; 2:它确实具有静态分配,但是我仍然必须管理{内的数据与缓冲区之间的边界{1}}。这意味着用我要摆脱的分配属性重写std::array

2 个答案:

答案 0 :(得分:11)

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

答案 1 :(得分:1)

您总是可以使用C样式的数组(与 // Start.cs ConfigureServices services.AddAuthentication(sharedOptions => { sharedOptions.DefaultScheme = JwtBearerDefaults.AuthenticationScheme; }) .AddJwtBearer(options => { options.Audience = "clientId"; options.Authority = "authority"; }); 中的基础样式相同),因为矢量不应该是静态的

std::array

要使其更有用,可以将其包装在类模板中以隐藏C样式 示例:

int arr[5]; // static array of 5 integers

使用示例:https://onlinegdb.com/BkBgSTlZH