【新手基础教程】系统之内存配置与查看 的使用

2021-04-184242
AI 快速预览详细 收起
本文介绍了MaixPy中的内存管理机制,包括GC(垃圾回收)和系统堆内存的使用。GC内存用于存储mpy层面的变量,而堆内存则由C层面的代码控制,主要用于图片、AI和LCD等内存需求。文章提供了设置和查看内存分配的方法,帮助用户解决内存不足的问题。通过调整GC内存大小,可以优化内存使用,提升代码性能。

内存管理

在 MaixPy 中, 目前使用了两种内存管理, 一种是 GC(垃圾回收), 另一种是系统堆内存, 两者同时存在。

比如:芯片有 6MiB 内存,加入固件使用了前面的 2MiB, 还剩 4MiB, 默认  GC使用 512KiB, 剩下的给系统堆内存管理。

  • mpy层面写的代码, 变量都是存在GC管理的内存块中,比如定义一个变量a = [1,2,3,4], 如果GC'内存不足了, 会自动触发gc.collect()函数的执行,  GC会自动把没有在使用了的变量给销毁,留出来空间给新的变量使用。

    GC使用标记-清除的方式进行内存回收,有兴趣可以看这里

  • 因为GC要扫描内存, 如果除了程序占用的内存,剩下的都给GC,那每次扫描需要耗费大量时间,所以分成了两中内存。 堆内存由  C层面的代码控制,主要用于图片内存, AI内存, LCD 内存, 以及模型加载到内存等

GC  内存的总大小是可以设置的, 所以,根据具体的使用情况可以适当修改GC内存大小, 比如:

  • 为了加载更大的模型,可以把  GC内存设置小一点
  • 如果分配新的变量提示内存不足, 可以适当将GC内存设置大一点即可
  • 如果都不够了, 就要考虑缩减固件大小,或者优化代码了

设置GC内存大小示例:

from Maix import utils
import machine

print(utils.gc_heap_size())

utils.gc_heap_size(1024*1024) # 1MiB
machine.reset()

注意修改后需要重启生效

查看内存分配情况:

import gc

print(gc.mem_free() / 1024) # stack mem

import Maix

print(Maix.utils.heap_free() / 1024) # heap mem

'''
>>> 
raw REPL; CTRL-B to exit
>OK
352.0937
4640.0
>
MicroPython v0.5.1-136-g039f72b6c-dirty on 2020-11-18; Sipeed_M1 with kendryte-k210
Type "help()" for more information.
>>> 
'''

创作许可协议

本项目采用 None(不开放任何权利,保留所有权利) 进行许可。

评论(0)
- 没有更多了 -