Как реализуется стек и куча в интерпретируемых языках?
- Правильно ли я понимаю что когда запускается виртуальная машины например CPython ей ОС выделяем область памяти разбитую на стек и кучу, а дальше уже внутренний код ВМ сам делит кучу на как бы "вложенные" стек и кучу для python скрипта? Т.е. это уже реализация самой ВМ управляет стеком и кучей под которое она сама выделяет место в своей куче?
Или все же она обращается как то именно к стеку выделенному под процесс операционной системой?
- Если в случае с компилируемыми языками у нас компилятор проходит весь текст программы и заменяет имя переменной на адрес смещения в стеке, то в случае интерпретируемых языков такой операции нет, тогда не совсем понимаю зачем нам вобще нужен стек, ведь мы не меняем именна переменных на адрес смещения, а видимо каждый раз при обращении к какой то переменной python скрипта ищем ее значение в какой то хеш таблице наверное? (где то же у нас должно храниться соответствие?)
Ответы (1 шт):
Для СPython : Реализация самой ВМ управляет стеком и кучей (как и сборкой мусора). Сверху стек, снизу куча. В стеке - ссылки на объекты в куче. Фактических значений в стеке нет. Все объекты и структуры данных (т.е. и переменные и значения) - в куче.Управляет ей внутренний менеджер памяти.
Напонимню, что в CPython переменная - не то же самое, что в C. Тут это просто имя, ссылающееся на PyObject/PyListObject.
Нашел ещё ссылку прямо тут со 131 одобрением, но особо ничего принципиального она к моему тексту не добавляет:-)
https://stackoverflow.com/questions/14546178/does-python-have-a-stack-heap-and-how-is-memory-managed