首页 新闻 会员 周边 捐助

有哪些字节码指令是存入到符号表,哪些是存入到命名空间的

0
[已解决问题] 解决于 2025-09-01 11:16
先把两个概念再钉死一次:
  • 符号表(co_names、co_varnames、co_cellvars …)
    只读、编译期冻结,运行期没有任何字节码能写它
  • 命名空间(模块 dict、函数 fastlocals、实例 dict …)
    运行时可读可写,所有 “STORE_*” 类指令都在这儿落笔。
_java_python的主页 _java_python | 小虾三级 | 园豆:1000
提问于:2025-09-01 11:15
< >
分享
最佳答案
0
没有任何字节码会把对象“写进符号表”——符号表在运行期是只读的。
所有真正“存名字-值绑定”的字节码都是写给“命名空间”,常见指令如下:
┌--------------┬------------------------┐
│ 字节码        │ 写入位置/命名空间        │
├--------------┼------------------------┤
│ STORE_NAME   │ 当前局部或全局 dict      │
│ STORE_GLOBAL │ 当前模块的全局 dict      │
│ STORE_FAST   │ 当前帧的 fastlocals 数组 │
│ STORE_DEREF  │ 闭包 cell 对象(freevars/cellvars) │
│ STORE_ATTR   │ 指定对象的属性 dict      │
│ STORE_SUBSCR │ 任意映射/序列的下标位置   │
└--------------┴------------------------┘
总结:
“写符号表”的指令 根本不存在;
“写命名空间”的指令就是上表这些 STORE 系列。
_java_python | 小虾三级 |园豆:1000 | 2025-09-01 11:15
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册