[uquote="VladislavS",url="/forum/viewtopic.php?p=4371584#p4371584"]В IAR realloc без вызова malloc умеет обходиться.[/uquote]
ну ок, пусть обходится.
А если уж тут собрались такие специалисты по памяти, обьясните мне, почему при вызове функции не один раз а несколько, используемый размер стека увеличивается?
int main(void) {
int i,
char c;
....
fun(&i, &c);
fun(&i, &c);
....
fun(&i, &c);
...
}
Вот пример. Я считал что когда вызывается функция, текущие локальные переменные сохраняются в стеке (ну еще там какая то информация о соостоянии), в вызванной функции происходит еще увеличение используемого стека на локальные переменные этой функции, а после выхода из функции, размер используемого стека возвращается к размеру который был до вызова функции.
Но в примере выше, keil после компиляции показывает что максимальный размер стека увеличился на 8 байт по сравнению с вариантом когда в начале функция fun() не вызывается дважды. Или это попытки компилятора чего там наоптимизировать?
У меня нет хрустального шара, чтобы гадать что там за функции. Но чуть выше я писал, что переменные могут и в РОН располагаться. Добавили кода и они в стек переехали. И потом, ARM Compiler V6 очень агрессивный в оптимизации - код в "лапшу режет". Поэтому, совет посмотреть под отладкой что там да как повторю в очередной раз.