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性能调优。
相关文章:
MicroPython核心:优化
MicroPython使用多种优化方法来节省RAM,同时确保程序的高效执行,本文会讨论其中的一些优化。 提示: MicroPython 字符串驻留(string interning) 和映射和字典(Maps and Dictionaries) 详细介绍了对字符串和字典的其他…...
Opencv——霍夫变换
霍夫直线变换 霍夫直线变换(Hough Line Transform)用来做直线检测 为了加升大家对霍夫直线的理解,我在左图左上角大了一个点,然后在右图中绘制出来经过这点可能的所有直线 绘制经过某点的所有直线的示例代码如下,这个代码可以直接拷贝运行 import cv2 as cv import matplot…...
Github 2024-01-28 开源项目日报Top10
根据Github Trendings的统计,今日(2024-01-28统计)共有10个项目上榜。根据开发语言中项目的数量,汇总情况如下: 开发语言项目数量Python项目3TypeScript项目2Rust项目1HTML项目1JavaScript项目1Cuda项目1C#项目1非开发语言项目1 Nuxt&#…...
【大数据安全】大数据安全的挑战与对策基础设施安全
目录 一、大数据安全的挑战与对策 (一)数据加密技术 (二)大数据安全与隐私 (三)大数据安全保障体系 (四)华为大数据安全解决方案 二、基础设施安全 (一࿰…...
【LLM多模态】Cogview3、DALL-E3、CogVLM、CogVideo模型
note 文章目录 noteVisualGLM-6B模型图生文:CogVLM-17B模型1. 模型架构2. 模型效果 文生图:CogView3模型DALL-E3模型CogVideo模型网易伏羲-丹青模型Reference VisualGLM-6B模型 VisualGLM 是一个依赖于具体语言模型的多模态模型,而CogVLM则是…...
python爬虫学习之selenium_chrome handless的使用
目录 一、Chrome handless简介 二、Chrome handless的系统要求 三、Chrome handless的基本配置 (直接复制放在.py文件开头) 四、Chrome handless 的应用 五、Chrome handless的封装 一、Chrome handless简介 Chrome handless 模式,Goog…...
Spring boot + Azure OpenAI 服务 1.使用 GPT-35-Turbo
Azure OpenAI 服务使用 GPT-35-Turbo 先决条件 maven 注意 beta.6 版本 <dependency><groupId>com.azure</groupId><artifactId>azure-ai-openai</artifactId><version>1.0.0-beta.6</version></dependency>问答工具类 pack…...
Vite+Vue3使用Vue-i18n笔记
一、下载依赖 vue-i18n yarn add vue-i18n创建存放语言文件的目录 以及配置文件的配置 我是在src/lang 新建index.ts、cn.ts、en.ts以及test文件夹其中再分别新建cn.ts以及en.ts /lang/index.ts 用于导出vue-i18n需要的配置对象 import en from "./en.ts"; import…...
流量密码《幻兽帕鲁》5天狂销700万份
*** 流量密码《幻兽帕鲁》5天狂销700万份 2024年,一匹游戏业的黑马没有预兆地就这么出现了 这就是《幻兽帕鲁》 它首日销量轻松达到200万,5天时间手到擒来700万销量,直接收入超15亿,刷新多个游戏市场纪录。 同时在线玩家数高达…...
怎么查询鸿蒙真机支持的API版本
1、打开设备的开发者模式与USB调试并通过USB连接上电脑。 2、管理员身份运行cmd。 3、进入hdc.exe所在目录。(鸿蒙OS IDE的SDK下载目录中) 4、输入hdc shell,进入特殊模式 5、输入 getprop hw_sc.build.os.apiversion 查看API版本 6、输入 getprop hw_sc.build…...
【NodeJS】005- NodeJS的NVM与express框架
1.NVM介绍与使用 1.介绍 nvm 全称 Node Version Manager 顾名思义它是用来管理 node 版本的工具,方便切换不同版本的Node.js 2.使用 nvm 的使用非常的简单,跟 npm 的使用方法类似 3.下载安装 首先先下载 nvm,下载地址 https://github.com/coreybutler/nvm-windows/rel…...
pandas使用read_csv时报错解决
问题描述: 在使用read_csv时报错: UnicodeDecodeError: utf-8 codec cant decode byte 0xc9 in position 9451: invalid continuation byte 或者: UnicodeDecodeError: gb2312 codec cant decode byte 0x88 in position 68296: illegal m…...
Optimism的挑战期
1. 引言 前序博客: Optimism的Fault proof 用户将资产从OP主网转移到以太坊主网时需要等待一周的时间。这段时间称为挑战期,有助于保护 OP 主网上存储的资产。 而OP测试网的挑战期仅为60秒,以简化开发过程。 2. OP与L1数据交互 L1…...
Linux——安装MySQL
1、安装mysql8.0.35 1.1、安装步骤 1.更新包列表,首先,确保您的系统已更新到最新状态。运行以下命令来更新包列表和安装最新的软件包: sudo apt update sudo apt upgrade2.安装MySQL服务器:运行以下命令来安装MySQL服务器&…...
java常量和kotlin常量
在java中使用final声明常量在kotlin中使用const val声明常量 常量在编译为字节码后会直接把调用常量的地方直接替换为常量值,示例如下: public class ConstDemo {public static final String NAME "Even";private static final int ID 100…...
Python学习笔记--创建最简单的自定义异常类
在Python中,当创建一个函数时,它应该执行一些操作或返回一些值。如果函数为空,则没有实际的操作或返回值,这是不符合函数设计的初衷的。因此,在Python中,函数体不能为空,必须至少包含一个语句&a…...
2024年,AI 掀起数据与分析市场的新风暴
2024 年伊始,Kyligence 联合创始人兼 CEO 韩卿在其公司内部的飞书订阅号发表了多篇 Rethink Data & Analytics 的内部信,分享了对数据与分析行业的一些战略思考,尤其是 AI 带来的各种变化和革命,是如何深刻地影响这个行业乃至…...
小程序软件测试应该怎么做?有什么作用?
近年来,随着移动互联网的快速发展,小程序软件的使用越来越广泛。无论是企业推广还是个人创作,小程序软件都具备了很大的潜力和市场空间。然而,在发布之前,进行充分的测试是至关重要的,以确保用户体验的顺畅…...
springboot2.2.9整合kafka之KafkaListener实现原理
1、开启kafka的注解EnableKafka 通过开启kafka注解可以看到Import的类KafkaListenerConfigurationSelector加载一个配置类KafkaBootstrapConfiguration,而此类中有两个重要的类: KafkaListenerAnnotationBeanPostProcessor、KafkaListenerEndpointRegistry 2、Kaf…...
数据结构day7
1.思维导图 1.二叉树递归创建 2.二叉树先中后序遍历 3.二叉树计算节点 4.二叉树计算深度。 5.编程实现快速排序降序...
ssc377d修改flash分区大小
1、flash的分区默认分配16M、 / # df -h Filesystem Size Used Available Use% Mounted on /dev/root 1.9M 1.9M 0 100% / /dev/mtdblock4 3.0M...
线程同步:确保多线程程序的安全与高效!
全文目录: 开篇语前序前言第一部分:线程同步的概念与问题1.1 线程同步的概念1.2 线程同步的问题1.3 线程同步的解决方案 第二部分:synchronized关键字的使用2.1 使用 synchronized修饰方法2.2 使用 synchronized修饰代码块 第三部分ÿ…...
聊聊 Pulsar:Producer 源码解析
一、前言 Apache Pulsar 是一个企业级的开源分布式消息传递平台,以其高性能、可扩展性和存储计算分离架构在消息队列和流处理领域独树一帜。在 Pulsar 的核心架构中,Producer(生产者) 是连接客户端应用与消息队列的第一步。生产者…...
UDP(Echoserver)
网络命令 Ping 命令 检测网络是否连通 使用方法: ping -c 次数 网址ping -c 3 www.baidu.comnetstat 命令 netstat 是一个用来查看网络状态的重要工具. 语法:netstat [选项] 功能:查看网络状态 常用选项: n 拒绝显示别名&#…...
定时器任务——若依源码分析
分析util包下面的工具类schedule utils: ScheduleUtils 是若依中用于与 Quartz 框架交互的工具类,封装了定时任务的 创建、更新、暂停、删除等核心逻辑。 createScheduleJob createScheduleJob 用于将任务注册到 Quartz,先构建任务的 JobD…...
在四层代理中还原真实客户端ngx_stream_realip_module
一、模块原理与价值 PROXY Protocol 回溯 第三方负载均衡(如 HAProxy、AWS NLB、阿里 SLB)发起上游连接时,将真实客户端 IP/Port 写入 PROXY Protocol v1/v2 头。Stream 层接收到头部后,ngx_stream_realip_module 从中提取原始信息…...
页面渲染流程与性能优化
页面渲染流程与性能优化详解(完整版) 一、现代浏览器渲染流程(详细说明) 1. 构建DOM树 浏览器接收到HTML文档后,会逐步解析并构建DOM(Document Object Model)树。具体过程如下: (…...
HBuilderX安装(uni-app和小程序开发)
下载HBuilderX 访问官方网站:https://www.dcloud.io/hbuilderx.html 根据您的操作系统选择合适版本: Windows版(推荐下载标准版) Windows系统安装步骤 运行安装程序: 双击下载的.exe安装文件 如果出现安全提示&…...
【C语言练习】080. 使用C语言实现简单的数据库操作
080. 使用C语言实现简单的数据库操作 080. 使用C语言实现简单的数据库操作使用原生APIODBC接口第三方库ORM框架文件模拟1. 安装SQLite2. 示例代码:使用SQLite创建数据库、表和插入数据3. 编译和运行4. 示例运行输出:5. 注意事项6. 总结080. 使用C语言实现简单的数据库操作 在…...
CMake控制VS2022项目文件分组
我们可以通过 CMake 控制源文件的组织结构,使它们在 VS 解决方案资源管理器中以“组”(Filter)的形式进行分类展示。 🎯 目标 通过 CMake 脚本将 .cpp、.h 等源文件分组显示在 Visual Studio 2022 的解决方案资源管理器中。 ✅ 支持的方法汇总(共4种) 方法描述是否推荐…...
