想必大家有时会遇到一些memory的panic,就像下图的提示![]() 这主要是内存溢出引起的。而内存溢出主要有内存池(memory pool)和RAM溢出两种,不管哪种溢出都是不规范使用内存或过度使用造成的。那具体有多少能用或怎么正确使用呢?接下来我们一起看看。 首先我们要了解芯片RAM的大小,以3044为例,datasheet中写了很多类型的RAM,但我们常用的只有P1核的DM(data memory),这个大小只有40KB。而这40KB也不全是给数据变量存储,里面会划分好几个分区,这部分可以在link_script_common.ld这个文件查看。我们也可以用一个简单的方法去看这个分区的情况,在pydbg的窗口输入apps1.subsystem.memory_usage(),我们就能看到整个P1的DM分区使用情况。 ![]() 可以看到这整一块大小正是40960个bytes,也就是40KB。而我们代码中申请的变量空间就是我图中圈出来的部分,大小约有24KB。这24KB还分了两部分,下面就来讲解下这两部分的内容。 \pmalloc_blocks:我们有时候会在代码中用到这样一些语句malloc和free,这是我们在代码中申请一部分空间,用完之后再释放时用到的语句。如果申请的指针变量没有用malloc分配空间就很容易出现莫名其妙的问题;或者用malloc分配了空间,但没有用free去释放空间,这就会造成空间没有被重复利用而导致内存溢出问题。其实malloc和free都是程序对内存使用的一种常见方法,他不是实时对RAM申请空间,而是在内存池(memory pool)中申请一个空间 ,这个内存池实际也是程序启动时申请的一个大变量。内存池的配置可以查找app_pools这数组。 ![]() |
GMT+8, 2025-6-15 07:45 , Processed in 0.074136 second(s), 19 queries , Gzip On, MemCached On.
Powered by Discuz! X3.5
© 2001-2025 Discuz! Team.