MicroPython核心:字符串驻留(String interning)

MicroPython使用字符串驻留可以同时保存在RAM和ROM,这就避免了存储相同字符串的重复副本,这主要适用于代码中的标识符,因为函数或变量名很可能会在代码中的多个地方出现。在MicroPython中,内部字符串被称为QSTR(uniQue STRing唯一字符串)。

QSTR值(类型为qstr)是QSTR池链接表的索引。QSTR会存储其长度及其内容的哈希值,以便在去重过程中进行快速比较。所有处理字符串的字节码操作都使用QSTR参数。

编译时生成QSTR

在 MicroPython C 代码中,任何应在最终固件中内嵌的字符串都被写成 MP_QSTR_Foo。在编译时,这将评估指向QSTR池中"Foo"索引的qstr值。

Makefile 中的一个多步骤过程实现了这一功能。总的来说,这个过程包括三个部分:

  1. 查找代码中的所有MP_QSTR_Foo标记。
  2. 生成一个静态QSTR池,其中包含所有字符串数据(包括长度和哈希值)。
  3. 用相应的索引替换所有MP_QSTR_Foo(通过预处理器)。

MP_QSTR_Foo标记从两个来源中搜索:

  1. $(SRC_QSTR) 中引用的所有文件。这是所有的C代码(即pyextmodports/stm32)但不包括第三方代码,如 lib

  2. 附加的 $(QSTR_GLOBAL_DEPENDENCIES)(包括mpconfig*.h)。

注意:frozen_mpy.c(由mpy-tool.py生成)有自己的

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

原子星

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值