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

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

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

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

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


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

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

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

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

В принципе, указатели (Д) наверное и не нужны. А вот место под Б2 наверное надо выделить (но я тут не уверен, не подумал достаточно хорошо).

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

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

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


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

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

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

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

В принципе, указатели (Д) наверное и не нужны. А вот место под Б2 наверное надо выделить (но я тут не уверен, не подумал достаточно хорошо).

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

Идея заключается в том, чтобы моменты выделения/удаления блоков (памяти, необзодимых для работы циклов)
соответствовали не вызовам функций, а входам и выходам из циклов.