关于NodeMCU的内存测试

本文详述了在NodeMCU开发过程中遇到的内存溢出问题,通过一系列实验测试了空函数、空表、数字和字符串在内存中的占用情况。实验结果显示,内存变化存在不确定性,但函数中表储存数字可能比单变量更节省空间。
摘要由CSDN通过智能技术生成

前言

正在用NodeMCU做项目,Lua语言很快就能拿来用,比用C语言开发快很多.但是突出的问题便是内存溢出.以前使用stm32时从没遇到过这个问题,觉得c语言中的联合体是给上世纪的51用的.自从这个项目进行的很顺利的到达预期80%的功能的时候,突然内存溢出触发看门狗时,心态就炸了.先是花了几天优化,憋出了几k内存,但是是基于阉割了一些冗余代码的基础上.再经历了源码改动未果,Lua协程架构不能有效节省内存之后,开始研究NodeMCU的struct模块,可以与C语言的结构体进行交互.进而引发了我研究各种数据储存的内存使用情况的研究.

实验情况

测试一个空函数占用堆空间

heap0=0
heap1=0
heap0=node.heap()
function fun()
end
heap1=node.heap()
print('@heap',heap0,heap1,(heap0-heap1))

@heap 40576 40376 200
可以看出一个空函数占用200B堆空间

测试一个空表占用空间

heap0=0
heap1=0
heap0=node.heap()
s={}
heap1=node.heap()
print('@heap',heap0,heap1,(heap0-heap1))

@heap 40576 40496 80

测试在表中创建一个数字的内存开销

heap0=0
heap1=0
s={}
heap0=node.heap()
s[1]=1
heap1=node.heap()
print('@heap',heap0,heap1,(heap0-heap1))

@heap 40496 40432 64

测试单表储存数据开销是否平均

heap0=node.heap()
s={1,2,3,4,5,6,7,8,9,10,11,12,13}
heap1=node.heap()
n=13
print('@heap',heap0,heap1,(heap0-heap1-296-88)/n)
@heap   1   39936   39872   64
@heap   2   39936   39872   32
@heap   3   39936   39824   37.333333333333
@heap   4   39936   39824   28
@heap   5   39936   39824   22.4
@heap   6   39936   39760   29.333333333333
@heap   7   39936   39760   25.142857142857
@heap   8   39936   39760   22
@heap   9   39936   39760   19.555555555556
@heap   10  39936   39632   30.4
@heap   11  39936   39632   27.636363636364
@heap   12  39936   39632   25.333333333333
@heap   13  39936   39632   23.384615384615
@heap   14  39936   39632   21.714285714286
@heap   15  39936   39632   20.266666666667
@heap   16  39936   39632   19
@heap   17  39936   39632   17.882352941176
@heap   18  39936   39376   31.111111111111
@heap   19  39936   39376   29.473684210526
@heap   20  39936   
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值