我是靠谱客的博主 光亮哈密瓜,最近开发中收集的这篇文章主要介绍stm32 malloc函数内存无法申请原因?,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

前几天在写代码的时候,使用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函数内存无法申请原因?所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(51)

评论列表共有 0 条评论

立即
投稿
返回
顶部