5

在像peephole这样的内部模块中,参数 ofLOAD_CONST存储在opcode.

例如,它用于获取操作参数的宏实现为:

#define GETARG(arr, i) ((int)((arr[i+2]<<8) + arr[i+1]))

的参数是数组LOAD_CONST的索引。consts

所以我猜也许我们在 Python 函数中最多只能使用 2 ^ 16 个常量。

但是当我尝试使用 66666 (> 65536) 常量的函数时,它仍然可以正常运行。

可能是什么原因?

4

1 回答 1

6

dis文档:

EXTENDED_ARG(分机)

为参数太大而无法放入默认两个字节的任何操作码添加前缀。ext 包含两个附加字节,它们与后续操作码的参数一起构成一个四字节参数,ext 是两个最重要的字节。

如果操作码需要超过 2 个字节的参数,则 EXTENDED_ARG 操作码会提供 2 个多字节的参数。

于 2014-04-13T06:25:17.627 回答