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

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

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

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

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


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

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

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

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

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


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

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

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

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