ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

text、data、bss、RO、RW、ZI、Code、elf、bin、hex扫盲

2022-08-24 14:30:44  阅读:158  来源: 互联网

标签:bin 初始化 RW FLASH ZI RAM bss data


目录

现象

eclipse中编译一个ARM工程,编译成功后有以下打印:
...

....

数据解析:
.text: 10290 byte
.data: 3220 byte
.bss: 276 byte
dec: 以上三种数据占 13786 byte
hex: 以上三种数据占 0x35da byte

Code:代表执行的代码,程序中所有的函数都位于此处。
RO-data:代表只读数据,程序中所定义的全局常量数据和字符串都位于此处。
RW-data:代表已初始化的读写数据,程序中定义并且初始化的全局变量和静态变量位于此处。
ZI-data:代表未初始化的读写数据,程序中定义了但没有初始化的全局变量和静态变量位于此处。

text

代码段(.text)(Code+RO-data) 存放代码、常量及向量表,只读。 最终存放在FLASH。
例如函数、const int table[]、中断向量表。

data

数据段 (.data) (RW-data)存放已初始化的全局/静态变量,可读可写。 最终存放在FLASH。
data放的是初始化的变量,且同时计入RAM和FLASH。链接器把数据分配在FLASH中然后在启动代码中从ROM拷贝到RAM。
例如int32_t myVar = 0x12345678;,data段仅包含初始化所用的数据(本例中的0x12345678),不含变量(myVar)。变量myVar不是常量,所以最终会存放于RAM内。但是初始值(0x12345678)是一个常量,因此可以放在FLASH里。

bss

.bss段 (ZI-data)存放所有未初始化的全局/静态变量,可读可写。 最终存放在RAM。
例如int32_t myGlobal; ,函数初始化bss段就是把未初始化的变量置0。

bin文件

binary文件,即二进制文件。
执行raw binary很简单,只需要将程序加载到其起始地址,就可以执行;

从可执行程序的角度来说,如果一个数据未被初始化,就不需要为其分配空间,所以.bss 并不占用可执行文件的大小,仅仅记录需要用多少空间来存储这些未初始化的数据,而不分配实际空间。
所以 bin = 代码段(text)+ 数据段(data) = Code + RO Data + RW Data
而程序运行在RAM中的大小 = (RW Data + ZI Data)
(.data) (RW-data) 同时计入RAM和FLASH。

elf文件

相比bin,多了段的加载地址,运行地址,重定位表,符号表等。

hex文件

hex的全称是Intel HEX,此类文件通常用于传输将被存于ROM或者EPROM中的程序和数据。是由一行行符合Intel HEX文件格式的文本所构成的ASCII文本文件。大多数EPROM编程器或模拟器使用Intel HEX文件。HEX文件记录由对应机器语言码和/或常量数据的十六进制编码数字组成。

标签:bin,初始化,RW,FLASH,ZI,RAM,bss,data
来源: https://www.cnblogs.com/solo666/p/16619167.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有