Где функция-член выделяет память в C++ и как часто?
Где функция-член класса получает свою память?
Является ли стековый фрейм ответом на это?
И распределяется ли он всякий раз, когда мы вызываем функцию-член?
Это как всякий раз, когда мы вызываем функцию-член, используя объект, он выделяется в кадре стека, а когда функция достигает его, возвращает оператор, что выделенный кадр стека освобождается?
1 ответ
где функция-член класса получает свою память?
Выделение памяти для данных функции определяется реализацией.
Является ли стековый фрейм ответом на это?
Для реализации C++ не требуется использовать структуру стека.
Структура стека для локальных переменных удобна, но не обязательна.
И распределяется ли он всякий раз, когда мы вызываем функцию-член?
Локальные переменные функции могут быть созданы, когда выполнение входит в функцию. Не требуется, чтобы реализация создавала переменные. Переменные могут существовать в глобальной памяти и инициализироваться, когда выполнение входит в функцию.
Это как всякий раз, когда мы вызываем функцию-член, используя объект, он выделяется в кадре стека, а когда функция достигает его, возвращает оператор, что выделенный кадр стека освобождается?
Популярной реализацией является выделение места в стеке для локальных переменных. Распределение пространства будет включать в себя увеличение или уменьшение указателя стека.
Когда выполнение выходит из области видимости, стек корректируется соответствующим образом.
Реализациям разрешено использовать регистры, поэтому существует вероятность, что память не выделяется и стек не изменяется. Реализация может помещать регистры в стек перед выполнением функции и извлекать их впоследствии.
Ответы на ваши вопросы определены реализацией. Небольшие встроенные системы могут использовать больше регистров или глобальной памяти, чем стек. Существует много возможных структур данных, которые можно использовать и при этом соответствовать стандарту языка C++.