单片机内存分配之 .data .bss .rodata段

一、概念

.bss段

    存放没有初始化或者初始化为0的全局变量或者静态局部变量。

.data段

    存放初始化为非0,且非const属性的全局变量或者静态局部变量。

.rodata段

    存放字符串和const常量,一般只放在ROM中。

二、实验

1.工具链:

    GNU Tools ARM Embedded(win)

2.C代码:

    
int im_data = 3;                       
int im_bss;
int im_bss_0 = 0;
const int im_rodata = 1;
static int im_data_sta = 1;
static int im_bss_sta_0 = 0;
static int im_bss_sta;
char *im_rodata_str = "length_10";

int main(void){
	static int im_data_func = 1;
	static int im_bss_func;
	return 0;
}

3.测试过程

    1>make 产生elf文件

    2>arm-none-eabi-objdump -t elf 打印符号列表,如下

单片机内存分配之 .data .bss .rodata段_第1张图片

    3>分析:

初始化为非零的全局变量和静态变量有:im_data、im_data_sta、im_data_func,它们存放在.data内存段中,im_rodata_str是指针型全局变量,也存放在.data中。

初始化为0和未初始化的的全局变量和静态变量有:im_bss、im_bss_0、im_bss_sta_0、im_bss_sta、im_bss_func,它们被存放在.bss段中。

字符串"length_10"和const常量im_rodata被存放在.rodata中("length_10"未引出符号表,但被存放在rodata中)。

    

你可能感兴趣的:(单片机基础)