Di solito non ho problemi a decidere se alcuni dati devono 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ù specifica in quanto comporta un'enorme quantità di dati, enorme rispetto alla memoria di sistema.
Sto lavorando a un codice esistente che cerco di migliorare (design, possibili problemi, prestazioni, ecc.). Questo codice viene eseguito su un vecchio MCU a 8 bit con solo 4KB di RAM . In questo codice devo affrontare l'uso di un array di quasi 1 KB (sì, 1 KB su un sistema RAM 4KB ). Viene utilizzato ogni byte di questo array, non è questa la domanda. Il problema è che questo array è un array statico nel file in cui è dichiarato, quindi il suo ciclo di vita è lo stesso di quello del programma (cioè 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 in cui viene utilizzato, in questo modo sarebbe nello stack e quindi risparmieremmo 1 KB 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 inconveniente di allocare il 25% della RAM in questo modo? (potrebbe essere il 50% o più dello stack)
Qualcuno potrebbe condividere qualche esperienza con questo tipo di situazione o qualcuno potrebbe pensare a qualche motivo valido per non mettere questo array in pila? Sto cercando svantaggi tecnici e commenti sul design.
L'unica cosa di cui sono consapevole è che devo assicurarmi di avere 1 KB di stack gratis quando si accede a questa funzione. Forse è tutto ciò di cui devo occuparmi, forse no.