Por lo general, no tengo problemas para decidir si algunos datos deben ser globales, estáticos o en la pila (no hay asignación dinámica aquí, por lo que no se debe usar el montón). También he leído algunas preguntas y respuestas como esta, pero mi pregunta es más específica, ya que implica una gran cantidad de datos, 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 antigua 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 4KB ). Se utiliza cada byte de esta matriz, esa no es la cuestión. 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 del programa (es decir, puede considerarse infinito).
Sin embargo, después de leer el código, descubrí que esta matriz no necesita un ciclo de vida infinito, está construida y tratada de manera totalmente procesal, por lo que deberíamos poder declararla solo en la función donde se usa, de esta manera estaría en la pila y, por lo tanto, ahorraríamos este 1 KB 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 asignar el 25% de la RAM de esta manera? (eso podría ser el 50% o más de la pila)
¿Podría alguien compartir alguna experiencia con este tipo de situación, o alguien piensa 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 tengo que asegurarme de tener 1 KB de pila libre al ingresar a esta función. Tal vez eso es todo lo que tengo que cuidar, tal vez no.