单片机的程序是怎么组成的呢,代码又是如何存放的呢?带着疑问,今天我们来学习下bss data text都是什么。
0x01.bss
.bss(block started by symbol)段是用来存放已经初始化为0或者未初始化的全局变量的内存区域,属于静态内存分配。
接下来编写代码来验证一下。
代码如下:
#include <stdio.h>
int bss_data[1024*1024];
int main(int argc,char * argv[])
{
return 0;
}
接下来我们编译一下,看看输出信息,使用命令
gcc -g bss.c -o bss
使用命令
size bss
text data bss dec hex filename
1055 272 4194336 4195663 40054f bss
1024*1024 = 4194336
可见bss这个未初始化的全局数组被存放在了bss段中。
bss段只占用运行内存,并不占用可执行文件大小。
0x02 .data
未初始化的全局变量放在了bss段,那么其他的全局变量呢,相信你已经猜到了,data段(data segment)就是用来存放已经初始化的全局变量的。
将上面的代码中,bss数组初始化为1,再编译一下看看就会发现之前的bss段大小,全部转移到了data段中,神奇!
data段不仅占用可执行文件的大小,也要占用运行内存。
0x03 .text
text段是用来存放代码的内存区域,这个区域是可执行的,我们编写的代码指令都会放在这个区域,感兴趣的同学可以参考步骤一来编译一下,查看下text段的大小。
本文深入探讨单片机程序的组成,详细讲解bss、data及text段的作用与存放内容,通过实例验证未初始化与已初始化全局变量的存储位置,以及代码指令的存放区域。
1万+

被折叠的 条评论
为什么被折叠?



