我目前正在使用 ARM Cortex M3 处理器和 64 KB SRAM 构建嵌入式系统。目前,我正在寻找一种方法来确保 STL 容器的确定性性能,其中包括确保我不会在运行时耗尽内存。
我主要关心 STL 容器如何执行动态内存分配。虽然我可以使用自定义分配器让这些结构从我预留的池中获取内存,但我需要为每个结构设置一个单独的池,以确保结构的一个实例不会占用另一个实例的空间。
我正在与该项目中的其他人合作,他们不想关心内存的原始分配,而是希望能够利用“众所周知的”数据结构(堆栈、队列、双端队列等)。因此,我目前正在考虑围绕 C 数组构建包装器以提供这些结构。这将启用支持这些容器所需的内存的静态分配,并允许其他开发人员根据编译器提供的代码大小信息在运行时了解他们已实例化的容器的大小。在我看来,这保证了在运行时不会发生内存中断问题,并大大简化了系统设计。
另一种选择是在系统初始化时分配 STL 容器。在初始化期间之后,不会发生额外的动态内存分配。然而,据我所知,标准的 C++ STL 数据结构不支持这一点——它要求诸如堆栈之类的容器能够被预先分配(类似于向量)。
如果对我提出的围绕标准 C 数组构建类的建议有任何评论,我将不胜感激?另外,有没有更简单的方法在编译时分配静态大小的 STL 容器,例如静态大小的堆栈或队列?(我知道矢量可以做到这一点,但其他我不确定)
注意:我已经阅读了另一个问题(Embedded C++ to use STL or not),但是这个问题的作者没有说明他们有多少内存(除了他们如何使用 ARM7 进程)或似乎是考虑类似于我的解决方案。
第二个注意事项:我知道对于一些开发人员来说,64 KB 的 SRAM 可能看起来像很多内存。事实上,我已经在内存显着减少的 AVR 处理器上进行了开发,所以我理解这个观点。然而,从我目前(可能是不知情的)的观点来看,在谈论 STL 容器时,64 KB 的内存并不算多。