日常技术积累-ARM中RO/RW/ZI
ARM中RO/RW/ZI
- 背景
- 定义
- LINUX内存为例
- ARM程序烧录
- 总结
背景
一直以来,对ARM体系中的RO/RW/ZI不是很清楚,只是知道有这些东西存在。有时看资料、项目中也会看到这些字眼。遂在此总结一些,谈谈自己的理解,方便日后查询,同时有什么错误的地方大家都可以指出,我会做出相应的修改。
定义
可直接从英文全称角度理解:
RO=read-only:只读数据
RW=read-write:可读可写数据
ZI=zero-initialized:未初始化数据
LINUX内存为例
下图以32位Linux系统内存结构为例:
红色和黄色就代表了RO/RW/ZI位置,而蓝色是代表函数内部数据区:局部变量。
代码区:存放程序的代码,即CPU执行的机器指令,并且是只读的。
常量区:存放常量(程序在运行的期间不能够被改变的量,例如: 10,字符串常量”abcde”, 数组的名字等)
静态区(全局区):静态变量和全局变量的存储区域是一起的,一旦静态区的内存被分配, 静态区的内存直到程序全部结束之后才会被释放
堆区:由程序员调用malloc()函数来主动申请的,需使用free()函数来释放内存,若申请了堆区内存,之后忘记释放内存,很容易造成内存泄漏
栈区:存放函数内的局部变量,形参和函数返回值。栈区之中的数据的作用范围过了之后,系统就会回收自动管理栈区的内存(分配内存 , 回收内存),不需要开发人员来手动管理。栈区就像是一家客栈,里面有很多房间,客人来了之后自动分配房间,房间里的客人可以变动,是一种动态的数据变动。
注意:const修饰的变量仍属于变量,不是常量,所以不是存放在常量区。
ARM程序烧录
ARM烧录bin文件到ROM中时,bin文件就只包含RO/RW数据,不包含ZI。
程序实际运行中,又会把RW数据搬运到RAM上,因为RW是变量,变量不能存在ROM中。
具体过程可以用下图表示:
总结
全文从arm体系下的RO/RW/ZI的英文全称角度切入,结合32位Linux内存结构说明RO/RW/ZI内存区的位置,最后通过程序烧录与运行解释了RO/RW/ZI的位置变化。
日常技术积累-ARM中RO/RW/ZI相关推荐
- code ro rw zi 编译的一个ARM的程序,编译结果中的一句话
code ro rw zi 编译的一个ARM的程序,编译结果中的一句话 Program Size: Code=8044 RO-data=52 RW-data=56 ZI-data=5184 其中: C ...
- RO/RW/ZI区别及在mcu中的存储分配
1 前言 本文所解决的问题是:KEIL编译出来的文件信息中包含RO RW ZI 大小,该信息到底是flash 还是ram大小? 2 ARM程序的组成 此处所说的"ARM程序"是指在 ...
- linux硬盘ro改为rw,RO,RW,ZI 和scatter file详解(转载)
要了解RO,RW和ZI需要首先了解以下知识: (1) ARM程序的组成 此处所说的"ARM程序"是指在 ARM系统中正在执行的程序,而非保存在ROM中的bin映像(image)文件 ...
- RO,RW,ZI,FLASH,RAM前世今生
好久没写博客,-.-. 因为接触两个新的平台,芯翼和OPL,又发现对内存和flash分布的一些疑问,或许是自己根基不够稳吧,如果要搞清楚这些的意义,需要以下几个步骤: 2.RO,RW,ZI 是什么 3 ...
- RO,RW,ZI 和scatter file详解(转载)
要了解RO,RW和ZI需要首先了解以下知识: (1) ARM程序的组成 此处所说的"ARM程序"是指在 ARM系统中正在执行的程序,而非保存在R ...
- stm32 RO RW ZI
1.RO段包括只读代码段(code段/.text段)和常量段(RO Data段/.constdata段). 2.RW段(.data段)指已被初始化成非0值的变量段. 3. ZI段(.bss段)指 ...
- CODE RO RW ZI
一直以来对于ARM体系 中所描述的RO,RW和ZI数据存在似是而非的理解,这段时间对其仔细了解了一番,发现了一些规律,理解了一些以前书本上有的但是不理解的东西,我想应该 有不少人也有和我同样的困惑,因 ...
- CODE RO RW ZI的区别
一直以来对于ARM体系 中所描述的RO,RW和ZI数据存在似是而非的理解,这段时间对其仔细了解了一番,发现了一些规律,理解了一些以前书本上有的但是不理解的东西,我想应该 有不少人也有和我同样的困惑,因 ...
- RO,RW,ZI概念
RO: RO=read-only RW: RW=read-write ZI: ZI=zero-initialized 各部分在空间上的分配结构如下图: When you compile a stand ...
最新文章
- python数据分析入门学习笔记儿
- 图论—割点zcmu2095
- 【MIPS汇编】ADDI,ADDIU,ADD,ADDU的区别、有符号无符号的谬误
- 面试后要请你吃饭_做了15年HR,面试4千人,发现优秀的会计能将这些题应答如流...
- 输出节点位移_绝对值信号的编码器有哪些信号输出(一、二)
- ORM中的Model与DDD中的DomainModel
- JavaScrip入门-变量计算%函数
- php 模板继承原理,模板继承体会
- Ubuntu16.04下禁用scp、sftp和winscp
- UML与软件建模 第五次作业
- 从国产手机自强复盘小米十年
- Oracle 创建新用户后无法登入,显示user lacks CREATE SESSION privilege; logon denied
- 常见阿拉伯数学符号以及拼写
- Boost.Asio的使用技巧
- CNN with Attention---channal and spatial attention
- Python 立体图形的画法(一)
- 爬虫图片mysql_爬取微博图片数据存到Mysql中遇到的各种坑\爬取微博图片\Mysql存储图片\微博爬虫...
- 两个List合并,并且按某一个字段排序
- 成品app直播源码,服务端与客户端传输视频文件
- 人工智能到底是什么?AI可以涵盖哪些领域?
热门文章
- APP 应用内活动运营,有哪些活动形式?
- 【视频处理】模拟视频信号及其传输
- 前沿关注 | 5G和边缘计算将如何改变AR和VR?
- 中台搞了2年,项目叫停,CIO被裁!本以为中台是道送分题,没想到是送命题!...
- 阿里云Linux服务器新手入门(2核4G)
- android 日历开发教程,android 开发教程之日历项目实践(三)
- oracle系统漏洞绿盟,【处置建议】Oracle WebLogic反序列化漏洞(CVE-2018-2628)安全处置建议...
- 语音信号处理频域语谱图matlab实验,语音信号的频域分析
- FTT暴雷加密熊市雪上加霜?如何对抗系统风险
- java 商城 商品查询_Javaweb网上商城项目实战(17)实现商品详情查询