0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

LuatOS的内存分配机制

合宙LuatOS 2026-04-16 12:37 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

本文将重点解析LuatOS的内存分配机制,说明系统如何为代码分配内存资源。

一、模组内存总体规划


LuatOS将有限的物理内存进行逻辑划分,就像把房子分成不同功能的房间。在不同的模组中RAM也不一样,具体的分配情况也不相同。

1.1 内存逻辑划分示例


我们以拥有8MB RAM的Air780EHM模组为例,根据实际测试结果:

I/user.mem.lua 4194296 35752 35752 -- Lua 内存:4MB 总,35KB 已用,35KB 峰值 I/user.mem.sys 3211584 102048 112264 -- 系统内存:约 3.06MB 总,102KB 已用,112KB 峰值

其内存分配大致如下图表所示:

wKgZO2ngZQ2AVhkOAALTHdyT4hA654.png

Lua内存: 4MB,占比50%;

系统内存(sys): 3MB,占比37.5%;

保留/隐藏区域: 1MB,占比12.5%。

这里约1MB的"隐藏"内存, 主要分配给了通信协议栈缓存、音频处理缓冲区、Wi-Fi缓冲区(如适用)、安全引擎缓存和DMA描述符等系统组件。

这种分配方式体现了LuatOS的设计理念——**优先保障系统核心功能的稳定运行,**然后将剩余资源分配给Lua虚拟机。

1.2 Air780EHM模组的PSRAM说明


1.2.1 物理内存构成


Air780EHM使用的是EC718HM系列芯片,该系列芯片配备了物理PSRAM。

1.2.2内存区域映射


sys内存:实际在PSRAM 上,与psram是同一个东西,数据完全一样。

Lua内存:实际在PSRAM 上,独占一块内存。

1.2.3 内存分配关系


Air780EHM的8MB全部位于物理PSRAM上,从用户视角看到的sys/lua/保留区域,只是逻辑上的划分,物理上都在PSRAM中。psram内存区域与sys内存区域在Air780EHM上是完全相同的,只是不同的命名方式。

二、内存查询接口


在LuatOS中,rtos.meminfo() 是最核心的内存查询接口。用于获取不同类型内存(lua、sys、psram)的使用情况。

rtos.meminfo(type)

函数功能: 获取LuatOS内存信息。

参数说明: type:可选参数,字符串类型。可取值 “lua”(查询Lua虚拟机内存)、“sys”(查询系统内存)、“psram”(查询PSRAM内存);默认值为 “lua”。

简要示例:

1--rtos.meminfo()接口使用示例 2 3--查询 Lua 虚拟机内存(默认)3-- 4 local total_lua, used_lua, max_used_lua = rtos.meminfo("lua") 5 log.info("Lua Memory:" 6 "Total:",total_lua / 1024, 7 "Used:", used_lua / 1024, "KB" 8 "Peak:",max_used_lua / 1024, "KB") 9 -- 2.查询系统内存10 11 local total_sys, used_sys, max_used_sys = rtos.meminfo("sys") 12 log.info ("System Memory:" 13 "Total:",total_sys / 1024,"KB" 14 "Used:", used_sys / 1024, "KB" 15 "Peak:", max_used_sys / 1024, "KB") 16 17--3.查询PSRAM 内存(如果支持) 18 local total_psram, used_psram, max_used_psram= rtos.meminfo("psram") 19 if total_psram and total_psram > 0 then 20 log. info ("PSRAM Memory:" 21"Total:", total_psram / 1024, "KB", 22 "Used:", used_psram / 1024, "KB" 23 "Peak:", max_used_psram / 1024, "KB") 24 end

三、内存区域与物理内存关系

3.1 物理内存和逻辑内存的区分


3.1.1 物理内存类型用大写的SRAM/PSRAM代表物理内存。


SRAM:静态随机存取存储器,访问速度快但容量较小;一定存在, 但不一定会暴露给客户使用。

PSRAM:外接伪静态随机存取存储器,访问速度较慢但容量较大;不一定存在, 也不一定会启用给客户使用。

注意区分SRAM和PSRAM的差异:单从硬件上说,SRAM更快但小,PSRAM慢但更大。

3.1.2 逻辑内存类型(用户可见) sys/psram/lua是LuatOS暴露给用户展示的内存分配布局。


虚拟机内存(“lua”):Lua虚拟机使用的内存区域,包括Lua脚本中的变量、函数、表、字符串等。

系统内存(“sys”):系统级内存区域,用于FreeRTOS任务栈、驱动缓冲区等。

psram内存(“psram”):专门管理的PSRAM区域,用于大容量数据缓存。

3.2 不同平台的差异


逻辑内存与物理内存的对应关系因平台而异,不同模组的差异如下:

wKgZPGngZiyAWOMLAAOb1hJ3cM0040.png

不同 LuatOS 硬件平台在内存布局上存在差异,Lua 运行内存、系统内存与 PSRAM 扩展内存的分配方式各有区别。部分型号将系统与脚本内存统一放在 PSRAM 中,部分则采用 SRAM 运行系统、PSRAM 承载脚本的分离架构,以适配不同功耗与性能需求。

以上就是LuatOS内存分配机制的核心内容,现在再回头看那位社群朋友的疑问:“AirUI这么流畅,会不会很吃内存?”相信你已经有了答案——只要内存分得巧,流畅和省内存,从来不是矛盾。

后续我们将针对Lua垃圾回收(GC)的内部工作原理,以及Zbuff、UART、MQTT等核心功能的内存使用分析,手把手教你排查内存泄漏。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 物联网
    +关注

    关注

    2950

    文章

    48101

    浏览量

    418102
  • 嵌入式开发
    +关注

    关注

    18

    文章

    1167

    浏览量

    50212
  • Lua
    Lua
    +关注

    关注

    0

    文章

    90

    浏览量

    11507
  • LuatOS
    +关注

    关注

    0

    文章

    169

    浏览量

    2745
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    cc2530网络地址分配机制是什么样的?

    是2.5.1a,不知道这个版本所采用的网络地址分配机制是什么样的?这个版本还阅读协议栈解压出来的document有没有用,会不会已经过时了,那些document基本上都是zstack2007的谢谢大家了。
    发表于 04-01 10:19

    如何去制作一个高效的内存分配器呢

    高效内存分配机制是什么意思?如何去制作一个高效的内存分配器呢?
    发表于 01-20 06:57

    Linux内存管理中的Slab分配机制

    早期Linux 的内存分配机制采用伙伴算法, 当请求分配内存大小为几十个字节或几百个字节时会产生内存碎片, 严重消耗系统资源。现今采用Sl
    发表于 04-24 10:49 11次下载

    WCDMA中的鉴权和密钥分配机制

    为了满足第三代移动通信安全体系的要求, 详细讨论了WCDMA 系统中的鉴权和密钥分配机制,从应用的角度分析了具体的算法和参数, 如从HEöA uC 发送鉴权消息到VLRöSGSN 的过程,VLR&o
    发表于 06-02 16:29 35次下载

    Snort匹配机制的改进

    基于规则的模式匹配是Snort 检测引擎的主要机制,本文在结合协议分析和模式匹配的基础上,对Snort 匹配机制进行了改进。首先对从网络中获取的数据包进行预先处理,利用协议分
    发表于 12-18 17:35 14次下载

    用户可靠性的众包系统任务分配机制

    针对现有研究对众包系统中用户可靠性考虑不足的问题,假设每个用户针对不同类型任务具有不同的可靠性,并在此基础上设计了一种基于用户可靠性的众包系统任务分配机制。首先,以任务发布者的收益最大化为优化目标
    发表于 11-27 18:01 6次下载

    基于IPv6的DiffServ流标签分配机制

    本文在DiffServ模型的基础上,改变了路由器的功能,使用IPv6流标签字段和源地址作为关键字,在路由器中建立转发表,根据关键字转发IPv6分组,提高转发速度;同时,在DS区域使用一种流标签分配机制,避免了流标签的重复和混乱。
    发表于 12-12 19:05 0次下载
    基于IPv6的DiffServ流标签<b class='flag-5'>分配机制</b>

    基于分簇的资源分配机制

    针对Macro-Femto网络中Femtocell与Macrocell之间的干扰问题,提出了一种基于分簇的资源分配机制。该机制结合图论及凸优化理论对毫微微节点分簇;随后采用基于速率公平的子信道分配
    发表于 01-26 17:58 0次下载
    基于分簇的资源<b class='flag-5'>分配机制</b>

    基于Linux内存管理与Android内存分配机制

    Android采取了一种有别于Linux的进程管理策略,有别于Linux的在进程活动停止后就结束该进程,Android把这些进程都保留在内存中,直到系统需要更多内存为止。这些保留在内存中的进程通常情况下不会影响整体系统的运行速度
    的头像 发表于 03-30 14:52 6875次阅读

    比特币分配机制最公平的原因是什么

    比特币协议中最早设计的分配机制至今仍然是最公平、也是最可靠的。
    发表于 07-19 14:59 2786次阅读

    一种基于信任的物联网频谱资源分配机制

    随着无线网络的快速发展,物联网中频谱资源的高效分配问题亟需解决,为此,提出一种基于信任的频谱资源分配机制TSRA。借鉴拍卖理论建立频谱资源拍卖系统模型,根据信任理论确定用户间的信任关系以缩小客户网络
    发表于 04-27 14:23 6次下载
    一种基于信任的物联网频谱资源<b class='flag-5'>分配机制</b>

    基于拓扑结构与分配机制的PoW共识机制

    对经典的PoW共识机制进行改进,改变了矿工所挖出区块接入主链的条件和收益分配策略,从而提出了一种改进共识机制。与PoW不同,在该改进共识机制中,首个生成的由N个子区块相连的子链将被整体
    发表于 05-31 15:48 3次下载

    基于权值和基于夏普利值的图像酬劳分配机制

    基于权值和基于夏普利值的图像酬劳分配机制
    发表于 06-24 15:35 43次下载

    jemalloc分配机制的介绍及其优化实践

    C/C++通过libc做内存分配。glibc中默认的分配机制是ptmalloc。除此之外,还有众多的不同侧重的优化,例如tcmalloc,jemalloc。
    的头像 发表于 05-30 09:12 2640次阅读
    jemalloc<b class='flag-5'>分配机制</b>的介绍及其优化实践

    Linux内核中的页面分配机制

    Linux内核中是如何分配出页面的,如果我们站在CPU的角度去看这个问题,CPU能分配出来的页面是以物理页面为单位的。也就是我们计算机中常讲的分页机制。本文就看下Linux内核是如何管理,释放和
    的头像 发表于 08-07 15:51 1247次阅读
    Linux内核中的页面<b class='flag-5'>分配机制</b>