2019-07-20 15:45发布
莫问1990 发表于 2016-8-6 09:47 图片上是编译后的结果,我的SRAM只有192K,但是编译结果里RW+ZI明显大于192K了,程序能正常运行,这是为什 ...
最多设置5个标签!
大量占用RAM其实都是数组,而不是变量。
数组是在运行过程中才会用到,而且不一定用满,例如串口或者一些记录几百个列表的buffer。
当运行过程中我们没有那么多内容要用到那么多buffer(例如最大是100个情况的存储,实际只用到60个,那么40个的内存是没有用到的),而c编译是不检测内存边界的,这也是c指针经常引发问题的原因,只有在运行时读写了不存在或不能访问的ram时,才会引发异常。
所以,RAM超出了限定值,但可以运行,不代表能够稳定长期运行。
还有就是一般都是自定义的数组太多,这个应该写程序时就预算到了呀,应该用更大的ram的芯片。
还有一点就是可能是编译器设定的堆栈过大了,这些堆栈是给动态分配内存指针用的,如果程序没有申请动态内存和释放的操作,那么这块是不会用到也是浪费了的。做好内存规划能够在资源不是极大富裕时降低芯片成本。
一周热门 更多>