概述
前几天在写代码的时候,使用malloc函数申请内存,发现返回值是null,减少申请内存数量即可申请,网上查阅了一些资料,发现需要修改堆栈。
顺便解释一下堆栈。
1.栈:由程序自动分配和释放,存放函数的参数与返回值、局部变量等,其操作方式类似于数据结构中的栈。局部变量太大或嵌套层数太多可能造成斩溢出。
Stack Size,一般小工程0X400足够,所以默认无需设置太大。
2.堆:一般由程序员使用malloc或new来进行分配,在适当的时候用free或delete来进行释放。若程序员不释放,程序结束时可能由操作系统回收。分配方式类似于数据结构中的链表。
Heap_Size的大小与malloc所分配的内存有关,当连续分配而又不释放,会导致满堆或内存泄露。
STM32的栈,是向下生长的。事实上,一般CPU的栈增长方向,都是向下的。而堆的生长方向,都是向上的。堆和栈,只是他们各自的起始地址和增长方向不同,他们没有一个固定的界限,所以一旦堆栈冲突,系统就到了崩溃的时候了。
针对stm32 堆栈问题主要修改这个文件startup_stm32f103xb.s中的:
Stack_Size EQU 0x400
Heap_Size EQU 0x200
具体大小根据自己的需求修改。
最后
以上就是光亮哈密瓜为你收集整理的stm32 malloc函数内存无法申请原因?的全部内容,希望文章能够帮你解决stm32 malloc函数内存无法申请原因?所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复