Actualmente estoy en el proceso de construir un sistema integrado, usando un procesador ARM Cortex M3, con 64 KB de SRAM. Por el momento, estoy buscando una manera de garantizar un rendimiento determinista con los contenedores STL, lo que incluye garantizar que no pueda terminar quedándome sin memoria en tiempo de ejecución.STL dentro del sistema integrado con memoria muy limitada
Me preocupa principalmente cómo los contenedores STL realizan la asignación dinámica de memoria. Aunque puedo utilizar un asignador personalizado para que estas estructuras obtengan memoria de un grupo que reservé, necesitaría configurar un grupo separado para cada estructura a fin de garantizar que una instancia de una estructura no ocupe el espacio de otra instancia.
Estoy trabajando con otras personas en este proyecto que no quieren preocuparse por la asignación de memoria sin procesar y preferirían poder utilizar las estructuras de datos "conocidas" (pila, cola, deque, etc.) . Por lo tanto, actualmente estoy considerando construir envoltorios alrededor de C-arrays para proporcionar estas estructuras. Esto permitiría la asignación estática de la memoria necesaria para admitir estos contenedores y permitir que los otros desarrolladores conozcan el tamaño del contenedor que han instanciado antes del tiempo de ejecución, según la información de tamaño de código proporcionada por el compilador. En mi opinión, esto garantiza que los problemas de interrupción de la memoria no pueden ocurrir en el tiempo de ejecución y simplifica considerablemente el diseño del sistema.
La otra opción implicaría la asignación de contenedores STL en la inicialización del sistema. Después del período de inicialización, no se puede asignar una memoria dinámica adicional. Sin embargo, que yo sepa, las estructuras de datos estándares STL de C++ no son compatibles con esto, requeriría que contenedores como una pila puedan ser preasignados (similar a un vector).
Agradecería cualquier comentario sobre mi propuesta para crear clases en torno a las C-arrays estándar? Además, ¿hay una forma más sencilla de asignar un contenedor STL de tamaño estático, como una pila o cola de tamaño estático, en tiempo de compilación? (Sé que esto es posible con el vector, pero los otros no estoy seguro)
Nota: He leído otra pregunta (Embedded C++ to use STL or not), pero el autor de esta pregunta no aclaró cuánta memoria tenía (aparte de cómo estaban usando un proceso ARM7) o parecen estar considerando una solución similar a la mía.
Segunda Nota: Soy consciente de que para algunos desarrolladores, 64 KB de SRAM pueden parecer una gran cantidad de memoria. De hecho, he hecho desarrollo en procesadores AVR con significativamente menos memoria, así que entiendo esta perspectiva. Sin embargo, desde mi vista actual (tal vez desinformada), 64 KB de memoria no es mucho cuando se habla de contenedores STL.
Al final del día, fui con EASTL. Fue fácil de usar y funcionó bien. – BSchlinker