[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() не вызывается дважды. Или это попытки компилятора чего там наоптимизировать?