Re[5]: Почему фреймы стека не выделяют в куче?
От: cserg  
Дата: 02.12.21 10:47
Оценка:
Здравствуйте, Эйнсток Файр, Вы писали:

ЭФ>До выполнения точки Т1 мы должны выделить

ЭФ>А+Б+В+Г+Д(количество вызовов других функций)*размер указателя на блок для функции
ЭФ>единиц памяти.
ЭФ>Там же мы должны создать сразу блоки под каждую из других функций.
Цикл может ни разу не выполниться, но вам придется все равно выделить для него память (В+Г+Д и пр.) и это касается не только циклов, придется заранее выделять максимальный размер фрейма из возможных или двигать его в куче, что будет очень медленно.

ЭФ>Но не выделяем пока память под блоки для функций, вызываемых глубже (вассал моего вассала не мой вассал).

ЭФ>То есть, память выделяем не всю сразу, а на одно углубление по стеку.
Ну и работать такая оптимизация тоже будет только на одно углубление, т.е. для вызовов из тела цикла, а для функций вызывыемых глубже проблема остается.

ЭФ>Т.е. под функцию main выделяем блок, размер которого определяется переменными, которые использует main и размерами стеков функций,

ЭФ>которые main вызывает непосредственно.
В некоторых случаях память в стеке можно заранее не выделять, а выделить только когда потребуется, как здесь:
if (...) {
  int a[1024]; // <--
  //...
  return;
}

а вам придется заранее резервировать память даже если условие не выполнится или переаллоцировать фрейм в куче.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.