Информация об изменениях

Сообщение Re[4]: Почему фреймы стека не выделяют в куче? от 02.12.2021 7:20

Изменено 02.12.2021 7:21 Эйнсток Файр

Re[4]: Почему фреймы стека не выделяют в куче?
S> сколько места вы заложите на "все вызовы подпрограмм"?

Результат(А) Функция НекаяФункция(КопируемыеПараметры(Б), ПараметрыПоСсылкамИУказателям)
Начало(Т1)
Локальные переменные, под которые не нужно место
Циклы
Мутабельные переменные циклов, под которые место потребуется(В)
Циклы более вложенные
Мутабельные переменные вложенных циклов, под которые место потребуется(Г)
Вызовы других функций (Д,Т2)
Конец вложенного цикла
Конец цикла
Финальное вычисление и возвращение результата
Конец функции

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

А в точке T2 должны проделать то же самое для функций, вызываемых из других функций.

То есть, память выделяем не всю сразу, а на одно углубление по стеку.

При этом, при вызове функции в итерации цикла мы переиспользуем уже выделенный блок памяти
не обращаясь к механизму выделения.
Re[4]: Почему фреймы стека не выделяют в куче?
S> сколько места вы заложите на "все вызовы подпрограмм"?

Результат(А) Функция НекаяФункция(КопируемыеПараметры(Б), ПараметрыПоСсылкамИУказателям)
Начало(Т1)
    Локальные переменные, под которые не нужно место
    Циклы
        Мутабельные переменные циклов, под которые место потребуется(В)
        Циклы более вложенные
            Мутабельные переменные вложенных циклов, под которые место потребуется(Г)
            Вызовы других функций (Д,Т2)
        Конец вложенного цикла
    Конец цикла
    Финальное вычисление и возвращение результата
Конец функции


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

А в точке T2 должны проделать то же самое для функций, вызываемых из других функций.

То есть, память выделяем не всю сразу, а на одно углубление по стеку.

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