QUOTE (Непомнящий Евгений @ Feb 25 2013, 09:05)

Плюсы не велики. Если стек переполнится - будут ровно те же проблемы

Если стек переполнится в этом случае - то никакое указание размера стека другими способами уже не поможет. Это будет означать, что память кончилась вся. Совсем.
QUOTE (Непомнящий Евгений @ Feb 25 2013, 09:05)

1. (Для ИАРа) Выделяешь под стек максимально возможный объем - если вдруг не велезешь в память - будет ошибка линковки
Там два стека. И можно поступить тем же образом, что и в gcc - исправив скрипт линкера заставить размещать стеки с конца. Причем в самом конце разместить стек возвратов (RSTACK), размер которого можно приблизительно оценить прикинув количество уровней вложенности подпрограмм и дав запас, скажем, 10-20 байт, а следом, ближе к началу памяти, разместить стек данных (CSTACK), вершина которого может безболезненно расти за пределы выделенной под CSTACK память до тех пор, пока не налезет на другие данные, т.е. пока физически есть свободная память. Можно указать размер CSTACK равный 0 и забыть про это. А уж если начнутся проблемы с переполнением - оптимизировать алгоритмы.
Делается это использованием символа '#' вместо '=' в определении сегментов и размещением определения RSTACK перед CSTACK:
CODE
-Z(DATA)RSTACK+_..X_RSTACK_SIZE#60-45F
-Z(DATA)CSTACK+_..X_CSTACK_SIZE#60-45F
QUOTE (Непомнящий Евгений @ Feb 25 2013, 09:05)

2. На верх стека пишешь магическое число (для ИАРа - на оба стека), периодически проверяешь, если проблема - выдаешь ошибку, перезагружаешься
Увы, тоже помогает не всегда. Функция может резервировать на стеке несколько байтов (например под буфер) и в процессе работы изменять не все из них. И по закону подлости магическое число попадает как раз на эти неизменные байты в конце массива, а функция работает с началом массива, уже за магическим числом.