当前位置: 首页 > news >正文

MicroPython核心:优化

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性能调优。

http://www.lryc.cn/news/291118.html

相关文章:

  • Opencv——霍夫变换
  • Github 2024-01-28 开源项目日报Top10
  • 【大数据安全】大数据安全的挑战与对策基础设施安全
  • 【LLM多模态】Cogview3、DALL-E3、CogVLM、CogVideo模型
  • python爬虫学习之selenium_chrome handless的使用
  • Spring boot + Azure OpenAI 服务 1.使用 GPT-35-Turbo
  • Vite+Vue3使用Vue-i18n笔记
  • 流量密码《幻兽帕鲁》5天狂销700万份
  • 怎么查询鸿蒙真机支持的API版本
  • 【NodeJS】005- NodeJS的NVM与express框架
  • pandas使用read_csv时报错解决
  • Optimism的挑战期
  • Linux——安装MySQL
  • java常量和kotlin常量
  • Python学习笔记--创建最简单的自定义异常类
  • 2024年,AI 掀起数据与分析市场的新风暴
  • 小程序软件测试应该怎么做?有什么作用?
  • springboot2.2.9整合kafka之KafkaListener实现原理
  • 数据结构day7
  • cleanmymacX有必要买吗
  • 智慧文旅:打造无缝旅游体验的关键
  • C语言 | 求最大/小值小技巧:fmax、fmin函数
  • 【深度学习每日小知识】Model Accuracy 模型准确率
  • 智能AI系统开发,专业软件硬件物联网开发公司,探索未来科技新纪元
  • 第七篇:node中间件详解
  • Jenkins自动化打包
  • 【服务端性能测试】性能测试策略如何做
  • 透明拼接屏造型:多样拼接与影响因素
  • c# 对路径的访问被拒绝
  • 【数据结构】单调队列