keil因堆栈不足导致的申请内存失败问题

8 篇文章 1 订阅
6 篇文章 11 订阅

  keil是一款MCU使用广泛的IDE,当程序规模较大时,我们使用malloc从堆中申请内存,有时编译成功,而程序无法正常运行,通过调试观察申请成功而使用此内存空间时又显示为野指针错误,或者出现程序莫名卡死等现象。
  在确保程序语法无误,没有堆栈溢出的操作后,我们应该检查分配给程序的堆栈空间是否足够,因为keil工程在运行中可使用的最大堆栈空间是事先分配好的。

在这里插入图片描述  编译后在编译输出窗口可看到程序中各个部分的占用空间大小,或者在.map文件中可看到相关信息
在这里插入图片描述各部分代表什么含义这里不做详细介绍了,我们在新建一个空工程时会发现ZI-data(未初始化全局及静态变量)是一个比较大的数字,其实就是事先为堆栈分配的空间。当堆栈空间不足导致程序无法正常运行时我们需要修改预设的堆栈空间大小(EQU后)。
在这里插入图片描述
其实不止keil或其他IDE,linux系统的栈空间也是可以通过命令修改的,因此在使用较大内存时或程序较大时需要注意是不是预留的堆栈空间不足导致的。另外提醒大小申请的堆空间使用结束后不要忘记释放哦。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值