У меня обычно не возникает проблем с выбором, должны ли некоторые данные быть глобальными, статическими или размещаться в стеке (здесь нет динамического выделения, поэтому не нужно использовать кучу). Я также прочитал несколько вопросов и ответов, таких как этот, но мой вопрос более конкретный, поскольку он включает в себя огромный объем данных, огромный по сравнению с системной памятью.
Я работаю над существующим кодом, который пытаюсь улучшить (дизайн, возможные проблемы, производительность и т. Д.). Этот код работает на старом 8-битном MCU с 4 КБ ОЗУ . В этом коде я сталкиваюсь с использованием массива почти 1 КБ (да, 1 КБ в системе ОЗУ 4 КБ ). Каждый байт этого массива используется, это не вопрос. Проблема в том, что этот массив является статическим массивом в файле, в котором он объявлен, поэтому его жизненный цикл такой же, как и у программного (то есть его можно считать бесконечным).
Однако после прочтения кода я только что обнаружил, что этот массив не нуждается в бесконечном жизненном цикле, он построен и обрабатывается полностью процедурно, поэтому мы должны иметь возможность объявить его только в той функции, в которой он используется, таким образом, это будет в стеке, и поэтому мы будем экономить 1 КБ ОЗУ.
Теперь вопрос: будет ли это хорошей идеей? С точки зрения дизайна, если ему не нужен бесконечный / глобальный жизненный цикл, он принадлежит стеку. Но эй, это 1 КБ из 4 КБ, нет ли недостатка в выделении 25% ОЗУ, как это? (это может быть 50% или более от стека)
Может ли кто-то поделиться некоторым опытом с такой ситуацией, или кто-то думает о какой-либо уважительной причине не помещать этот массив в стек? Я ищу технические недостатки, а также комментарии по дизайну.
Единственное, что я осознаю, это то, что я должен убедиться, что у меня на самом деле есть 1 КБ стека при входе в эту функцию. Может быть, это все, что я должен позаботиться, а может и нет.