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