Как вы упомянули, переполнение стека является основной проблемой . Даже если ваш конкретный случай не очень велик, подумайте, что произойдет, если функция рекурсивная.
Еще хуже, , если функция вызывается из рекурсивной функции, она может быть встроенной , что приводит к "неожиданным" проблемам переполнения стека. (Я сталкивался с этой проблемой несколько раз с помощью компилятора Intel.)
Что касается проблем с производительностью, то их лучше измерить, чем угадать. Но наличие очень большого массива в стеке потенциально может повредить локальность данных, если он разделяет другие переменные.
Кроме этого, распределение стека дешевое и быстрее, чем выделение кучи. На некоторых компиляторах (например, MSVC) использование стека более 4 Кб заставит компилятор генерировать проверку безопасности буфера. (Но его можно отключить.)