.text .data .bss .stack 和 heap

1.1 代码->可执行文件

一个程序从代码到可执行文件的过程,包括 预处理、编译、汇编,链接。可执行文件有多重类型,有ELF, BIN等。
ELF:Executable and Linkable Format

1.2 ELF可执行文件的结构

最常规的包含:
ELF头:包含ELF头的大小、目标文件的类型、.text .data .bss 等文件的位置和大小等信息

.text :程序代码区,已经编译好的机器代码。放在flash上,断电不失。
.romdata: 一些只读数据。有些时间可以直接放到.text。放在flash上,断电不失。
.data:已经初始化的全局变量和静态变量(static修饰)放在flash上,断电不失。
.bss :未初始化的全局变量和初始化为0的全局变量

1.3 内存区域

当一段程序要执行的时候,需要加载到内存。
而这段程序在内存中存放的位置并不是来连续的。会根据ELT文件描述的信息,把程序加载到内存对应的区域。程序在内存中也会被放到对应的区域。比如 ELF文件的.text会被 放到内存的.text段。

.text段 一定是会被限定为只读的。如果代码段被改写会是很恐怖的。这段内存区域一定是只读的,如果是可写的话,可能会被踩内存等非预期的改写。在SRAM上。
.data. 运行时也会从flash加载到SRAM上。
.bss 链接或运行时,该区域整段可能被初始化为0
.stack 栈是程序在运行时动态分配的。这是一个先入后出的结构,这种结构天然的适合保存 程序在运行期间的函数调用栈和 函数参数。栈是从高地址往低地址分配的。因此栈内存放的东西越多,栈顶指针的地址越小。
.heap 堆是由程序动态申请的内存空间。这是一个先入先出的结构。堆是从低地址往高地址分配的。

1.4 各段在内存中的位置

在这里插入图片描述
图片引用自:https://zhuanlan.zhihu.com/p/502569736

  • 4
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

做个好男人!

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值