Как реализуется стек и куча в интерпретируемых языках?

  1. Правильно ли я понимаю что когда запускается виртуальная машины например CPython ей ОС выделяем область памяти разбитую на стек и кучу, а дальше уже внутренний код ВМ сам делит кучу на как бы "вложенные" стек и кучу для python скрипта? Т.е. это уже реализация самой ВМ управляет стеком и кучей под которое она сама выделяет место в своей куче?

Или все же она обращается как то именно к стеку выделенному под процесс операционной системой?

  1. Если в случае с компилируемыми языками у нас компилятор проходит весь текст программы и заменяет имя переменной на адрес смещения в стеке, то в случае интерпретируемых языков такой операции нет, тогда не совсем понимаю зачем нам вобще нужен стек, ведь мы не меняем именна переменных на адрес смещения, а видимо каждый раз при обращении к какой то переменной python скрипта ищем ее значение в какой то хеш таблице наверное? (где то же у нас должно храниться соответствие?)

Ответы (1 шт):

Автор решения: Сергей

Для СPython : Реализация самой ВМ управляет стеком и кучей (как и сборкой мусора). Сверху стек, снизу куча. В стеке - ссылки на объекты в куче. Фактических значений в стеке нет. Все объекты и структуры данных (т.е. и переменные и значения) - в куче.Управляет ей внутренний менеджер памяти.

Напонимню, что в CPython переменная - не то же самое, что в C. Тут это просто имя, ссылающееся на PyObject/PyListObject.

Нашел ещё ссылку прямо тут со 131 одобрением, но особо ничего принципиального она к моему тексту не добавляет:-)

https://stackoverflow.com/questions/14546178/does-python-have-a-stack-heap-and-how-is-memory-managed

→ Ссылка