Где функция-член выделяет память в C++ и как часто?

Где функция-член класса получает свою память?

Является ли стековый фрейм ответом на это?

И распределяется ли он всякий раз, когда мы вызываем функцию-член?

Это как всякий раз, когда мы вызываем функцию-член, используя объект, он выделяется в кадре стека, а когда функция достигает его, возвращает оператор, что выделенный кадр стека освобождается?

1 ответ

где функция-член класса получает свою память?

Выделение памяти для данных функции определяется реализацией.

Является ли стековый фрейм ответом на это?

Для реализации C++ не требуется использовать структуру стека.
Структура стека для локальных переменных удобна, но не обязательна.

И распределяется ли он всякий раз, когда мы вызываем функцию-член?

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

Это как всякий раз, когда мы вызываем функцию-член, используя объект, он выделяется в кадре стека, а когда функция достигает его, возвращает оператор, что выделенный кадр стека освобождается?

Популярной реализацией является выделение места в стеке для локальных переменных. Распределение пространства будет включать в себя увеличение или уменьшение указателя стека.
Когда выполнение выходит из области видимости, стек корректируется соответствующим образом.

Реализациям разрешено использовать регистры, поэтому существует вероятность, что память не выделяется и стек не изменяется. Реализация может помещать регистры в стек перед выполнением функции и извлекать их впоследствии.

Ответы на ваши вопросы определены реализацией. Небольшие встроенные системы могут использовать больше регистров или глобальной памяти, чем стек. Существует много возможных структур данных, которые можно использовать и при этом соответствовать стандарту языка C++.

Другие вопросы по тегам