Код: Выделить всё
/*******************************************/
// code in code.h
/*******************************************/
#define _PyCode_CODE(co) ((const uint16_t *)(co)->co_code_adaptive)
#define _PyCode_DEF(SIZE) { \
// ... \
char co_code_adaptive[(SIZE)]; \
}
/* Bytecode object */
struct PyCodeObject _PyCode_DEF(1);
Код: Выделить всё
/*******************************************/
// code in specialize.c
/*******************************************/
void
_PyCode_Quicken(PyCodeObject *code)
{
_Py_QuickenedCount++;
int previous_opcode = -1;
_Py_CODEUNIT *instructions = _PyCode_CODE(code);
for (int i = 0; i < Py_SIZE(code); i++) {
int opcode = _Py_OPCODE(instructions[i]);
// ...
}
В частности, в файле specize.c внутри функции _PyCode_Quicken этот макрос используется для определения uint16_t * указатель с именем инструкции. Затем код обращается к памяти с помощью оператора []. Как Python гарантирует корректность доступа к памяти?
Будем очень признательны за любую информацию об основных проектных решениях или документации, объясняющей этот подход.
Подробнее здесь: https://stackoverflow.com/questions/791 ... nter-in-py
Мобильная версия