目标文件各代码段、数据段分析

2020-07-01  本文已影响0人  车到山前必有路2021

Keil编译后的Code,RO,RW,ZI分别表示什么以及和芯片Flash、SRAM的对应关系

    Code:代码的大小

    RO:常量所占空间

    RW:程序中已经初始化(非0)的变量所占空间

    ZI:未初始化的static变量和全局变量以及堆栈所占的空间

上述参数和芯片Flash以及SRAM的对应关系是

    Flash占用大小=Code+RO+RW

    SRAM占用大小=RW+ZI

---------------------------------------------------------------------------------------------------------------------

Linux下Size命令的输出不包括stack和heap的部分。只包括文本段(text), 代码段(data),未初始化数据段(bss)三部分, 无rodata段。

1、文本段:包含程序的指令,它在程序的执行过程中一般不会改变。

2、数据段:包含了经过初始化的全局变量和静态变量,以及他们的值。

3、BSS段:包含未经初始化的全局变量和静态变量。

4、堆栈段:包含了函数内部声明的局部变量。

在linux下内存分配是以页为单位的。而页是通过段管理。各个段之间是独立的,方便管理。linux程序执行时。能够分为下面几个内存段:一、.bss段 ,一般是指用来存放程序中未初始化的全局变量的一块内存区域。

二、.data段,用于存储初始化的全局变量,初始化为0的全局变量出于编译优化的策略还是被保存在BSS段。

三、.rodata段,也叫常量区,用于存放常量数据,ro就是Read Only之意。

四、.text段,用于存放程序代码的。

五、stack段

六、heap段

1、经过初始化的全局变量和静态变量保存在数据段中。

2、未经初始化的全局变量和静态变量保存在BSS段。

3、函数内部声明的局部变量保存在堆栈段中。

4、const修饰的全局变量保存在文本段中,const修饰的局部变量保存在堆栈段中。   

5、字符串常量保存在文本段中。

上一篇下一篇

猜你喜欢

热点阅读