当前位置: 首页 > article >正文

通过map文件了解堆栈分配(STM32、MDK5)--避免堆栈溢出

在最近的一个项目的开发中,每当调用到一个函数,程序就直接跑飞。debug跟进去看不出什么逻辑错误,但发现函数内局部变量声明之后,全局变量的值被清零,后来查看局部变量地址已经超出栈的范围,于是确定是栈溢出。如果不稍微了解一下堆栈,在开发过程中可能碰到各种奇怪的错误。

一、 .map和startup.s文件

MAP 文件是程序的全局符号、源文件和代码行号信息的唯一的文本表示方法,它可以在任何地方、任何时候使用,不需要有额外的程序进行支持。

在MDK5中,在项目中双击Target就能自动打开.map文件。
在这里插入图片描述
Startup.s文件是系统的启动文件,主要包括堆和栈的初始化配置、中断向量表的配置以及将程序引导到main( )函数等。

Startup.s主要完成三个工作:栈和堆的初始化、定位中断向量表、调用Reset Handler。

1.堆栈作用

栈(stack)空间,用于局部变量,函数调时现场保护和返回地址,函数的形参等。

堆(heap)空间,主要用于劢态内存分配,也就是说用 malloc,calloc,


http://www.kler.cn/a/409831.html

相关文章:

  • centos安装小火车
  • Python酷库之旅-第三方库Pandas(237)
  • 力扣--LCR 154.复杂链表的复制
  • Java项目实战II基于微信小程序的图书馆自习室座位预约平台(开发文档+数据库+源码)
  • 使用脚本实现hadoop-yarn-flink自动化部署
  • 中班幼儿户外运动游戏活动现状及策略研究
  • 数学知识1
  • ubity3D基础
  • pytorchDay33
  • 【漏洞复现】CVE-2020-1956
  • 在接口实现时使用自定义对象的方法(非工具类,和单例模式)
  • Java中三种常用布局方式
  • Vue报错:error Mixed spaces and tabs no-mixed-spaces-and-tabs——报错处理
  • 神经网络归一化方法总结
  • 鸿蒙心路旅程:探索与收获之旅 勇攀高峰
  • 【我在CSDN成长】我的五周年创作纪念日
  • 掌握控制流的艺术:Go语言中的if、for和switch语句
  • php 导出excel 一个单元格 多张图片
  • 释放已删除空间资源
  • API设计与开发
  • MATLAB R2024b软件下载安装步骤
  • A047-基于Spring Boot的医疗挂号管理系统的设计与实现
  • java编程开发基础,正则表达式的使用案例Demo
  • 基于微信小程序的小动物救助领养平台
  • 页的初步认识
  • H3C OSPF 多区域实验