Por lo general, no tengo problemas para decidir si algunos datos tienen que ser globales, estáticos o en la pila (aquí no hay una asignación dinámica, por lo que no hay uso del montón). También he leído algunas preguntas y respuestas, como esta pero mi pregunta es más específico ya que involucra una gran cantidad de datos, enorme en comparación con la memoria del sistema.
Estoy trabajando en un código existente que trato de mejorar (diseño, posibles problemas, actuaciones, etc.). Este código se ejecuta en una MCU de 8 bits con solo 4KB de RAM . En este código me enfrento al uso de una matriz de casi 1 KB (sí, 1 KB en un sistema de RAM de 4 KB ). Se usa cada byte de esta matriz, esa no es la pregunta. El problema es que esta matriz es una matriz estática en el archivo donde se declara, por lo que su ciclo de vida es el mismo que el programa uno (es decir, puede considerarse infinito).
Sin embargo, después de leer el código, acabo de descubrir que esta matriz no necesita un ciclo de vida infinito, se construye y se trata de una manera completamente procesal, por lo que deberíamos poder declararlo solo en la función donde se usa, de esta manera estaría en la pila, y por lo tanto guardaríamos este 1KB de RAM.
Ahora la pregunta: ¿Sería una buena idea? Desde el punto de vista del diseño, si no necesita un ciclo de vida infinito / global, pertenece a la pila. Pero bueno, eso es 1KB de 4KB, ¿no hay ningún inconveniente en la asignación de un 25% de la RAM de esta manera? (que podría ser el 50% o más de la pila)
¿Podría alguien compartir algo de experiencia con este tipo de situación, o alguien podría pensar en alguna razón válida para no poner esta matriz en la pila? Estoy buscando inconvenientes técnicos, así como comentarios sobre el diseño.
Lo único que tengo en cuenta es que debo asegurarme de que tengo 1KB de pila libre al ingresar a esta función. Tal vez eso es todo lo que tengo que cuidar, tal vez no.