Normalmente, não tenho problemas para decidir se alguns dados devem ser globais, estáticos ou na pilha (sem alocação dinâmica aqui, portanto, sem uso da pilha). Também li algumas perguntas e respostas como essa, mas minha pergunta é mais específica, pois envolve uma enorme quantidade de dados, enorme em comparação com a memória do sistema.
Estou trabalhando com um código existente que tento melhorar (design, possíveis problemas, performances etc.). Esse código é executado em um antigo MCU de 8 bits com apenas 4KB de RAM . Neste código, enfrento o uso de uma matriz de quase 1 KB (sim, 1 KB em um sistema de RAM de 4KB ). Cada byte dessa matriz é usado, essa não é a questão. O problema é que essa matriz é uma matriz estática no arquivo em que foi declarada, portanto seu ciclo de vida é o mesmo do programa (ou seja, pode ser considerado infinito).
No entanto, depois de ler o código, acabei de descobrir que esse array não precisa de um ciclo de vida infinito; ele é construído e tratado de maneira totalmente processual; portanto, devemos poder declará-lo apenas na função em que é usado, dessa forma, ele estaria na pilha e, portanto, salvaríamos esse 1 KB de RAM.
Agora a pergunta: seria uma boa ideia? Do ponto de vista do design, se não precisar de um ciclo de vida infinito / global, ele pertence à pilha. Mas ei, isso é 1KB de 4KB, não há nenhuma desvantagem em alocar 25% da RAM assim? (que pode ser 50% ou mais da pilha)
Alguém poderia compartilhar alguma experiência com esse tipo de situação ou alguém pensa em algum motivo válido para não colocar essa matriz na pilha? Estou procurando desvantagens técnicas e comentários sobre o design.
A única coisa que tenho consciência é que tenho que ter certeza de que tenho 1 KB de pilha livre ao entrar nessa função. Talvez seja tudo o que tenho para resolver, talvez não.