gpt4 book ai didi

c++ - 固定分配 std::vector

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:06:07 27 4
gpt4 key购买 nike

我是一名嵌入式软件开发人员,因此我不能总是使用所有优秀的 C++ 功能。最困难的事情之一是避免动态内存分配,因为它在某种程度上适用于所有 STL 容器。

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

如果每个 vector 都有一个分配的内存空间,这是 vector 可以增长到的最大大小,那就太好了。这将创建确定性行为,并可以在编译时映射微 Controller 的内存使用情况。当 vector 达到其最大大小时调用 push_back 将创建一个 std::bad_alloc

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

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

旁注#1:

我不能使用 std::array 作为 1:它不是由我的编译器提供和 2:它确实有一个静态分配,但我仍然必须管理我之间的边界std::array 中的数据和缓冲区。这意味着用我的分配属性重写一个 std::vector,这是我试图摆脱的。

最佳答案

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

还有:没有 LLVM 依赖项的 LLVM 小 vector here .这会在堆栈中创建对象,直到达到编译时常量,然后它才会移动到堆中。

关于c++ - 固定分配 std::vector,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56934911/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com