美文网首页
目标文件各代码段、数据段分析

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

作者: 车到山前必有路2021 | 来源:发表于2020-07-01 10:56 被阅读0次

    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、字符串常量保存在文本段中。

    相关文章

      网友评论

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

          本文链接:https://www.haomeiwen.com/subject/xflcqktx.html