兰州优化网站推广,深圳鹏洲建设工程有限公司网站,徐州做网站设计,抚养网站建设MicroPython使用多种优化方法来节省RAM#xff0c;同时确保程序的高效执行#xff0c;本文会讨论其中的一些优化。
提示#xff1a;
MicroPython 字符串驻留#xff08;string interning#xff09; 和映射和字典(Maps and Dictionaries) 详细介绍了对字符串和字典的其他…MicroPython使用多种优化方法来节省RAM同时确保程序的高效执行本文会讨论其中的一些优化。
提示
MicroPython 字符串驻留string interning 和映射和字典(Maps and Dictionaries) 详细介绍了对字符串和字典的其他优化。
冻结字节码
MicroPython从文件系统加载Python代码时首先将文件解析为临时的内存表示形式然后生成字节码供执行这两个过程都存储在堆RAM中。这会导致大量内存被占用。MicroPython交叉编译器可用于生成一个.mpy 文件其中包含Python模块的预编译字节码虽然该文件仍将被加载到RAM中但避免了解析阶段的额外开销。
作为进一步优化.mby文件中的预编译字节码可以 冻结 到固件映像文件中作为主固件编译过程的一部分这意味着字节码将从 ROM 中执行。这将大大节省内存并减少堆碎片。
更多信息可参阅 MicroPython的Manifest文件介绍。
变量
MicroPython 对局部变量和全局变量的处理方式不同。全局变量存储在堆上的全局字典中注意每个模块都有自己独立的字典因此是独立的命名空间。而局部变量则存储在 Python 的值栈中它可能存在于C堆栈中也可能存在于堆中。通过 Python栈中的偏移量可以直接访问它们这比在字典中进行全局查找更有效。
因为标识符存储在RAM中所以全局变量名的长度也会影响RAM的使用量标识符越短使用的内存就越少。
另一方面以下划线开头的const变量被视为适当的常量不会分配或添加到 字典中因此可以节省一些内存。这些变量使用MicroPython库的const()方法因此
from micropython import constX const(1)
_Y const(2)
foo(X, _Y)会编译为
X 1
foo(1, 2)内存分配
大多数常见的MicroPython结构都不在堆上分配不过以下结构体可以在堆上分配
动态数据结构如列表、映射等函数、类和对象实例导入全局变量的首次赋值在全局 dict 中创建槽
有关以用户为中心的优化视角的详细讨论请参阅MicroPython性能调优。