куча предназначена для хранения данных, где время жизни хранилища не может быть определено заранее
Хотя это правильно, оно также неполно.
Стек разворачивается, когда вы выходите из своей области видимости, поэтому, как вы сказали, использовать его для глобальных переменных области действия невозможно. Это, однако, где вы перестаете быть на правильном пути. Хотя вы знаете время жизни (или, точнее, scope , так как это самый важный фактор здесь), вы также знаете, что оно выше стекового фрейма , поэтому, учитывая только два варианта, вы ставите его в кучу.
Существует третий вариант, фактическая статическая переменная, объявленная в верхней области видимости, но она будет работать только в том случае, если ваши объекты имеют конструкторы по умолчанию.
TL; DR: использовать глобальное (статическое) хранилище либо для указателя на массив (динамическое распределение), либо только для фактического массива (статическое распределение).
Примечание: Ваше предположение, что стек каким-то образом "быстрее", чем куча, является неправильным, они оба находятся в одной и той же оперативной памяти, вы просто обращаетесь к ней относительно разных регистров. Также я хотел бы еще раз упомянуть, насколько мне не нравится использование терминов стек и куча.