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

来源:互联网 发布:python 连接sap 编辑:程序博客网 时间:2024/04/29 22:25
    最近在对程序的编译和运行机制比较感兴趣,总结了一些关于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、程序代码区--存放函数的二进制代码。
原创粉丝点击