我是嵌入式软件开发人员,因此,我不能总是使用所有不错的C ++功能。最困难的事情之一是避免动态内存分配,因为动态内存分配在所有STL容器中普遍存在。
std::vector
在处理可变数据集时非常有用。不过,问题在于分配(例如std::reserve
)在初始化或固定时未完成。这意味着在复制时可能会发生内存碎片。
最好让每个向量都有一个分配的内存空间,该空间是向量可以增长到的最大大小。这将产生确定性的行为,并有可能在编译时映射微控制器的内存使用情况。在向量达到其最大大小时调用push_back
会创建一个std::bad_alloc
。
我已阅读到可以编写std::allocator
的替代版本来创建新的分配行为。是否可以使用std::allocator
来创建这种行为,或者替代解决方案更合适?
我真的很想继续使用STL库并对其进行修改,而不是重新创建自己的向量,因为我比他们的实现更容易犯错误。
边注1:
我不能将std::array
用作1:编译器未提供它; 2:它确实具有静态分配,但是我仍然必须管理{内的数据与缓冲区之间的边界{1}}。这意味着用我要摆脱的分配属性重写std::array
。
答案 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