Di solito non ho alcun problema nel decidere se alcuni dati debbano essere globali, statici o in pila (nessuna allocazione dinamica qui, quindi nessun uso dell'heap). Ho anche letto alcuni Q / A come questo ma la mia domanda è più specifico poiché comporta una quantità enorme di dati, enorme rispetto alla memoria di sistema.
Sto lavorando a un codice esistente che cerco di migliorare (progettazione, possibili problemi, prestazioni, ecc.). Questo codice viene eseguito su un vecchio MCU a 8 bit con solo 4KB di RAM . In questo codice mi trovo ad affrontare l'uso di un array di quasi 1 KB (sì, 1 KB su un sistema 4KB RAM ). Viene utilizzato ogni byte di questo array, non è questa la domanda. Il problema è che questa matrice è una matrice statica nel file in cui è dichiarata, quindi il suo ciclo di vita è uguale a quello del programma (vale a dire può essere considerato infinito).
Tuttavia, dopo aver letto il codice, ho appena scoperto che questo array non ha bisogno di un ciclo di vita infinito, è costruito e gestito in modo completamente procedurale, quindi dovremmo essere in grado di dichiararlo solo nella funzione dove è usato, in questo modo sarebbe in pila, e quindi salveremmo questo 1KB di RAM.
Ora la domanda: sarebbe una buona idea? Dal punto di vista del design, se non ha bisogno di un ciclo di vita infinito / globale, appartiene allo stack. Ma hey, questo è 1KB su 4KB, non c'è alcun svantaggio nell'assegnare il 25% della RAM in questo modo? (che potrebbe essere il 50% o più dello stack)
Qualcuno potrebbe condividere qualche esperienza con questo tipo di situazione, o qualcuno pensa a qualche valido motivo per non mettere questo array in pila? Sto cercando gli inconvenienti tecnici e commenti sul design.
L'unica cosa che sono consapevole è che devo assicurarmi di avere effettivamente 1KB di stack libero quando si accede a questa funzione. Forse è tutto quello che devo curare, forse no.