最近在对程序的编译和运行机制比较感兴趣,总结了一些关于ARM生成的镜像文件和在内存中的内容,同时还有一些疑问,欢迎大家指教。
    首先,程序主要有以下三部分组成:
    RO:指程序的指令和常量(我们的代码编译后生成的是机器指令)
    RW:指程序中已经初始化的变量
    ZI:程序中未初始化的变量 现在我们知道了程序的是由这三部分组成的,那我们生产的镜像文件(bin)又包含什么呢?
    镜像文件指的是烧录到flash中的文件只包含RO和RW部分,ZI不包含在其内。之所以image中不包含ZI,是因为ZI全部都是0,内有必要包含,只要在程序运行之前,在内存中将ZI区域的值全部清零即可,包含在flash中反而浪费空间。而RW是初始化过得
变量,这些数值不可能无中生有,所以flash中必须包含。   下面是一个我编译后的map文件截图:
    

可以看出统计结果:
    code和RO size是RO
    RAM包含了:RW data和 ZI data
    ROM包含了:code + RW + RO

    程序的执行过程:将RW搬运到程序的RAM区,将ZI所在的RAM区全部清零,完成这两项工作后,程序才能正常访问变量,然后CPU从flash中取指令,执行程序。 一个程序编译后占用的内存分以下几个部分:
    1、栈区(stack)--用于存放函数的参数,局部变量等。
    2、堆区(heap)--由程序员来分配和释放的内存。
    3、全局区、静态区--包含初始化和未初始化的全局变量和静态变量。
    4、常量区--存放字符串等常量。
    5、程序代码区--存放函数的二进制代码。

ARM程序的镜像文件以及在内存中的分区相关推荐

  1. Linux内存中加载二进制,linux – 程序退出后二进制文件会留在内存中吗?

    我知道程序首次启动时,由于代码不在内存中,因此在开始时会出现大量页面错误,因此需要从磁盘加载代码. 程序退出后会发生什么?二进制文件是否留在内存中?该程序的后续调用是否会发现代码已经在内存中,因此没有 ...

  2. python生成epub文件_python在内存中生成Zip文件!

    import zipfile import StringIO class MemoryZipFile(object): def __init__(self): #创建内存文件 self._memory ...

  3. 阿里云Raw镜像文件如何在VMware中打开

    作者:王少辉  链接:http://www.kumb.cn/blog/21.html 阿里云ECS服务器镜像文件是可以下载下来在本地做测试的,首先要在阿里云提交工单,申请"镜像导出" ...

  4. linux 内存日志,性能优化:使用ramlog将日志文件转移到内存中

    Ramlog 以系统守护进程的形式运行.在系统启动时它创建虚拟磁盘(ramdisk),将 /var/log 下的文件复制到虚拟磁盘中,同时把虚拟磁盘挂载为/var/log.然后所有的日志就会更新到虚拟 ...

  5. linux内存迁移,性能优化:使用Ramlog将日志文件转移到内存中

    Ramlog 以系统守护进程的形式运行.在系统启动时它创建虚拟磁盘(ramdisk),将 /var/log 下的文件复制到虚拟磁盘中,同时把虚拟磁盘挂载为/var/log.然后所有的日志就会更新到虚拟 ...

  6. c语言中读取内存的文件,c++从内存中读取文件内容,内容写到内存 实现文件的内存共享代码实例...

    使用c++代码进行内存共享操作,内存共享可以通过key value的形式来保存内存,后面可以使用key值来直接读取内存,效率会很高/ 函数说明: shmget(key_t key, size_t si ...

  7. android+5+镜像,msm8909+android5.1分区及烧录的镜像文件介绍

    msm8909+android5.1分区及烧录的镜像文件介绍 发布时间:2017-6-29 14:48:37 编辑:www.fx114.net 分享查询网 本篇文章主要介绍了"msm8909 ...

  8. msm8909+android5.1分区及烧录的镜像文件介绍【转】

    本文转载自: EMMC的分区及其保存的文件 Partition label filename 说明 PrimaryGPT gpt_main0.bin modem NON-HLOS.bin sbl1 s ...

  9. 基于WINCE6.0下载multiple XIP镜像文件

    ********************************LoongEmbedded******************************** 作者:LoongEmbedded(kandi ...

最新文章

  1. oracle视图能增删改,oracle视图的增删改
  2. 微信后端服务架构及其过载控制系统DAGOR
  3. document怎么取得日期选择框的值_一次性取得跨年度的租金收入如何进行财税处理?...
  4. php中隐藏和展开文章,手机端第一屏页面文章的展开和隐藏_html/css_WEB-ITnose
  5. 【NLP】四万字全面详解 | 深度学习中的注意力机制(三)
  6. Scala可变参数列表,命名参数和参数缺省
  7. plan explorer mysql_plan explorer支持oracle吗
  8. mysql数据库的三级模式_2016年计算机三级MySQL数据库试题
  9. latex在overleaf可以成功编译运行,没有错误,但是上传到springer期刊的时候总是出现错误?
  10. nginx 常用命令整理
  11. 腾讯公布5G开放平台全景图,定义12大场景,引入45个应用
  12. android 缩放组件,Android控件之ZoomControls缩放控件
  13. C# BackgroundWorker组件学习
  14. 高颜值智能存储 华三魔术家M2无线云盘评测
  15. GPRS DTU是什么?其工作原理是什么? (转自aerkate)
  16. python发送邮件 退回_【破案了】python发邮件问题,求助!为什么总被退回?
  17. 一个简单移动页面ionic打包成app
  18. Linus最高产,2021 Linux内核开发统计出炉
  19. Cookie和Session的作用,区别和各自的应用范围,cookie、Session工作原理
  20. 基于位置的 AR 应用程序开发最完整指南

热门文章

  1. 资源分享——免费的高端PPT模板网址
  2. 计算机ppt翻页笔,ppt翻页笔怎么使用?
  3. 如何用计算机计算年金现值,如何用excel算年金现值
  4. 【算法】传教士和野人问题
  5. 森锐读卡器连接不上_蓝牙接收器配对不成功的常见问题和解决方案
  6. 【NOIP2013模拟】Freda的传呼机
  7. Chrome HackBar工具下载
  8. js选中html的数字设置倒计时,JS实现的网页倒计时数字时钟效果
  9. excel查询oracle数据库,用Excel直接查询Oracle中的数据
  10. 【个人记录 | UNet | 整理ing】