c创建python虚拟机_Python虚拟机(CPython)是否将字节码转换为机器语言?

它比机器语言更高级.有一个

giant switch statement查看每个操作码并根据操作码决定做什么.以下是一些片段:

switch (opcode) {

...

TARGET(LOAD_CONST) {

PyObject *value = GETITEM(consts, oparg);

Py_INCREF(value);

PUSH(value);

FAST_DISPATCH();

}

...

TARGET(UNARY_NEGATIVE) {

PyObject *value = TOP();

PyObject *res = PyNumber_Negative(value);

Py_DECREF(value);

SET_TOP(res);

if (res == NULL)

goto error;

DISPATCH();

}

...

TARGET(BINARY_MULTIPLY) {

PyObject *right = POP();

PyObject *left = TOP();

PyObject *res = PyNumber_Multiply(left, right);

Py_DECREF(left);

Py_DECREF(right);

SET_TOP(res);

if (res == NULL)

goto error;

DISPATCH();

}

TARGET和DISPATCH的东西是优化的一部分,并没有完全通过常规的开关机制.像PyNumber_Negative和PyNumber_Multiply这样的函数是Python C API的一部分,它们调度诸如否定和乘法之类的操作.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值