Теперь Кью работает в режиме чтения

Мы сохранили весь контент, но добавить что-то новое уже нельзя

Какова структура файла байткода CPython?

ПрограммированиеData science+3
Анонимный вопрос
Data Science
  · 1,3 K
Openstack DevOps and IBM/Informix Certified DBA . Phd in Math (Duality of spaces of...  · 4 мая 2022
CPython — это виртуальная машина на основе стека. Любая функция, имя или символ помещаются в стек. Интерпретатор выполняет операции, извлекая элементы из стека и возвращая результаты обратно. При вызове функции в стек помещается новый кадр. Фрейм — это область памяти, которая содержит имя функции, аргументы и номер строки программы, с которой можно возобновить выполнение после возврата функции. Каждый раз, когда функция возвращается, ее кадр выталкивается.
=======================
Структура файлов .pyc
Файл pyc содержит 16-байтовый заголовок (четыре 32-битных слова) и полезную нагрузку переменного размера.
Байты от 0 до 3 содержат магическое число, используемое для определения того, какая версия Python сгенерировала файл. См. https://docs.python.org/3/library/importlib.html#importlib.util.MAGIC_NUMBER.
Байты с 4 по 7 содержат битовое поле (PEP 552). По крайней мере, в 3.7.3 это поле оставлено пустым. В будущем он должен стать строительным блоком для воспроизводимых сборок.
==========================
Байты с 8 по 11 содержат временную метку даты модификации исходного файла.
Байты с 12 по 15 содержат размер исходного файла.
Начиная с 16-го байта полезная нагрузка хранит упорядоченный кодовый объект. Объекты кода предоставляют, среди прочего, следующие атрибуты:
==========================
co_argcount количество аргументов (не включая аргументы * или **)
co_code строка необработанного скомпилированного байт-кода
co_consts кортеж констант, используемых в байт-коде. Это вложенная структура данных, которая может содержать экземпляры объектов кода.
co_filename имя файла, в котором был создан этот объект кода
co_firstlineno номер первой строки в исходном коде Python
растровое изображение co_flags: 1=оптимизировано | 2 = новые местные жители | 4=аргумент | 8=*аргумент
co_lnotab закодированное сопоставление номеров строк с индексами байт-кода
co_name имя, с которым был определен этот объект кода
co_names кортеж имен локальных переменных
co_nlocals количество локальных переменных
Требуется пространство стека виртуальной машины co_stacksize
co_varnames кортеж имен аргументов и локальных переменных
========================
Все в Python является объектом, и после компиляции каждый объект будет хранить свой собственный байт-код. Давайте запустим простой пример в repl:
Касаемо Sum - эта строка представляет собой список кодов операций и их аргументов (если они есть), которые будут интерпретироваться и выполняться программным циклом в ceval.c. 
Модуль dis можно использовать для дизассемблирования байт-кода в удобочитаемую форму.
========================
Sum была собрана в следующие операции:
LOAD_FAST <index> (код операции 124 в байтовой строке) помещает аргументы функции (a и b) в позицию индекса 0 и 1 в стеке.
BINARY_ADD (код операции 23) извлекает из стека два элемента (b и a), складывает их вместе и возвращает результат обратно в стек.
RETURN_VALUE извлекает элемент из стека (возвращаемое значение функции)
1 эксперт согласен
Смотри также https://opensource.com/article/18/4/introduction-python-bytecode CPython использует виртуальную... Читать дальше