Типы выделения памяти по моменту привязки lvalue в Python
У меня возникли проблемы с домашним заданием. Я провел много исследований, но застрял. Назначение выглядит следующим образом:
Разработайте и внедрите пример, в котором вы показываете различные типы переменных, которые реализует назначенный язык, в соответствии с их классификацией на момент связывания с lvalue.
Я исследовал различные типы и пришел к следующему:
Переменные можно разделить на 4 типа в зависимости от момента связывания с lvalue.
- Статический: память выделяется до выполнения, а переменные сохраняются в памяти в течение всего выполнения программы
- Автоматический (или полустатический): память выделяется при загрузке области действия переменной и освобождается при выходе из области действия.
- Динамический: память выделяется только при необходимости во время выполнения. (Я понимаю, что это означает, что вместо выделения, например, при вызове функции, оно выделяется, когда выполняется фактическое объявление переменной). Память освобождается при необходимости. Указатели являются примером, который я нашел в этом.
- Полудинамический: я не нашел четкого определения этого, но пример, который я видел, это массивы, размер которых неизвестен до времени выполнения.
У меня есть примеры каждого из них на Паскале, но моим назначенным языком для этого задания является Python. Я не могу найти, какие типы распределения использует Python. Я видел здесь, что Python использует динамическое распределение, но я не уверен, является ли это действительно динамическим (ручное освобождение, управляемое сборщиком мусора) или автоматическим (так как программист не должен делать это вручную). Я также не уверен, являются ли такие вещи, как свойства класса, глобальные переменные и константы статическими или они работают так же, как и другие переменные (автоматические / динамические).
Буду очень признателен за любые сведения о типе памяти, используемой python, или даже за просмотром моих определений каждого типа. Как уже упоминалось, я исследовал это, но то, что я обнаружил, было либо неясным (для меня), либо в отношении программирования конкретных проблем (то есть, как я вручную выделяю / освобождаю память в Python), а не того, какой из типов, упомянутых выше, использует Python.
1 ответ
Я провел некоторое исследование, но не могу найти ссылки на статическое распределение памяти в Python или, точнее, CPython: кажется, что большинство аспектов управления памятью не определены языком Python, но оставлены гибкими для его реализации.
Я считаю, что все управление памятью в CPython будет "динамическим", поскольку именно его среда выполнения управляет частной кучей (когда это необходимо) для выделения памяти для объектов (и, как я уже говорил в предыдущем комментарии, почти все является объектом в Python!)
Хотя это и не связано напрямую с вашим вопросом, в CPython возможно "типизированное" размещение, например, с использованием типа типизированного массива.
Теперь PyPy другой зверь. Он использует RPython в качестве интерпретатора времени выполнения, который, кажется, делает более интересные вещи в отношении распределения памяти, например, анализирует использование пользовательских классов.
Теперь я не уверен, классифицируется ли это как автоматическое распределение, но об этом можно поговорить в вашем отчете!