У мене зазвичай не виникає проблем з вирішенням того, чи повинні деякі дані бути глобальними, статичними або на стеці (тут немає динамічного розподілу, тому немає використання купи). Я також прочитав кілька таких питань, як цей, але моє запитання є більш конкретним, оскільки воно включає величезний обсяг даних, величезний порівняно з системною пам'яттю.
Я працюю над існуючим кодом, який намагаюся вдосконалити (дизайн, можливі проблеми, вистави тощо). Цей код працює на старому 8-бітовому MCU з лише 4 КБ оперативної пам’яті . У цьому коді я зіткнувся з використанням масиву майже 1 КБ (так, 1 КБ в системі оперативної пам’яті 4 КБ ). Кожен байт цього масиву використовується, це не питання. Проблема полягає в тому, що цей масив є статичним масивом у файлі, де він оголошений, тому його життєвий цикл такий же, як і програмний (тобто його можна вважати нескінченним).
Однак, прочитавши код, я просто з’ясував, що цей масив не потребує нескінченного життєвого циклу, він побудований і розглядається цілком процедурно, тому ми повинні мати можливість оголосити його лише у функції, де він використовується, таким чином, це було б на стеці, і тому ми зберегли б цей 1 КБ оперативної пам’яті.
Тепер питання: чи це було б гарною ідеєю? З точки зору дизайну, якщо йому не потрібен нескінченний / глобальний життєвий цикл, він належить до стека. Але ей, це 1 КБ з 4 КБ, хіба немає недоліків виділення 25% оперативної пам’яті, як це? (це може становити 50% або більше стека)
Може хтось поділиться певним досвідом подібної ситуації, чи хтось задумається про будь-яку поважну причину не поставити цей масив у стек? Я шукаю технічні недоліки, а також коментарі щодо дизайну.
Єдине, що я усвідомлюю, це те, що я маю переконатися, що я фактично маю 1 КБ стека безкоштовно при введенні цієї функції. Можливо, це все, що я маю подбати, а може й ні.