C代码的内存区域

一直以来, 从未深入理解内存中的代码段, 数据段, BSS段, 堆栈 …, 现在项目需要, 编译的代码大了一点点, flash/ram 不够, 需要优化代码, 因此需要先了解哪些是占 Flash空间, 哪些是占 Ram 空间之后. 才能对应进行优化, 东翻西找了一大堆资料后, 总算是整明白了, 整理成笔记, 方便自己也方便别人, 何乐而不为呢.

1. 名词-五大段

1.1. BSS段

BSS:(Block Started by Symbol), 用于存放代码中未初始化的全局变量的一段内存区域. 属于静态内存分配区.

1.2. 代码段

code/text: 用于可执行代码的一段内存区域, 该部分区域的大小在代码编译完成之后就已经确定, 并该段区域为只读(但有些MCU也允许可写, 很少见), 该段也会包含一些只读的变量, 如字符串常量就存放在该段中.

1.3. 数据段

data:用于存放代码中已初始化的全局变量, 静态变量(全局/局部)的一段内存区域. 属于静态内存分配区.

1.4. 堆

heap:堆是用于给运行中的程序动态分配使用的一段区域, 大小不固定, 可动态增加或减少(一般向上增长), 调用 malloc/free 函数负责分配和释放内存. 

1.5 栈

stack:栈是用于存放局部变量(不包括静态变量), 也用于在函数被调用时, 传递参数和返回值, 利用栈的先进先出特性, 用于中断时保存/恢复现场特别方便. 

2. 段在内存中的分布图

在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值