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.编程实现快速排序降序...
Auto-Coder使用GPT-4o完成:在用TabPFN这个模型构建一个预测未来3天涨跌的分类任务
通过akshare库,获取股票数据,并生成TabPFN这个模型 可以识别、处理的格式,写一个完整的预处理示例,并构建一个预测未来 3 天股价涨跌的分类任务 用TabPFN这个模型构建一个预测未来 3 天股价涨跌的分类任务,进行预测并输…...
376. Wiggle Subsequence
376. Wiggle Subsequence 代码 class Solution { public:int wiggleMaxLength(vector<int>& nums) {int n nums.size();int res 1;int prediff 0;int curdiff 0;for(int i 0;i < n-1;i){curdiff nums[i1] - nums[i];if( (prediff > 0 && curdif…...
【CSS position 属性】static、relative、fixed、absolute 、sticky详细介绍,多层嵌套定位示例
文章目录 ★ position 的五种类型及基本用法 ★ 一、position 属性概述 二、position 的五种类型详解(初学者版) 1. static(默认值) 2. relative(相对定位) 3. absolute(绝对定位) 4. fixed(固定定位) 5. sticky(粘性定位) 三、定位元素的层级关系(z-i…...
Qwen3-Embedding-0.6B深度解析:多语言语义检索的轻量级利器
第一章 引言:语义表示的新时代挑战与Qwen3的破局之路 1.1 文本嵌入的核心价值与技术演进 在人工智能领域,文本嵌入技术如同连接自然语言与机器理解的“神经突触”——它将人类语言转化为计算机可计算的语义向量,支撑着搜索引擎、推荐系统、…...
C++.OpenGL (10/64)基础光照(Basic Lighting)
基础光照(Basic Lighting) 冯氏光照模型(Phong Lighting Model) #mermaid-svg-GLdskXwWINxNGHso {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-GLdskXwWINxNGHso .error-icon{fill:#552222;}#mermaid-svg-GLd…...
AI书签管理工具开发全记录(十九):嵌入资源处理
1.前言 📝 在上一篇文章中,我们完成了书签的导入导出功能。本篇文章我们研究如何处理嵌入资源,方便后续将资源打包到一个可执行文件中。 2.embed介绍 🎯 Go 1.16 引入了革命性的 embed 包,彻底改变了静态资源管理的…...
React---day11
14.4 react-redux第三方库 提供connect、thunk之类的函数 以获取一个banner数据为例子 store: 我们在使用异步的时候理应是要使用中间件的,但是configureStore 已经自动集成了 redux-thunk,注意action里面要返回函数 import { configureS…...
音视频——I2S 协议详解
I2S 协议详解 I2S (Inter-IC Sound) 协议是一种串行总线协议,专门用于在数字音频设备之间传输数字音频数据。它由飞利浦(Philips)公司开发,以其简单、高效和广泛的兼容性而闻名。 1. 信号线 I2S 协议通常使用三根或四根信号线&a…...
嵌入式常见 CPU 架构
架构类型架构厂商芯片厂商典型芯片特点与应用场景PICRISC (8/16 位)MicrochipMicrochipPIC16F877A、PIC18F4550简化指令集,单周期执行;低功耗、CIP 独立外设;用于家电、小电机控制、安防面板等嵌入式场景8051CISC (8 位)Intel(原始…...
深度学习之模型压缩三驾马车:模型剪枝、模型量化、知识蒸馏
一、引言 在深度学习中,我们训练出的神经网络往往非常庞大(比如像 ResNet、YOLOv8、Vision Transformer),虽然精度很高,但“太重”了,运行起来很慢,占用内存大,不适合部署到手机、摄…...
