ARM 中的内存分类

来源:互联网 发布:p城办事处优化器 编辑:程序博客网 时间:2024/05/20 10:11

说明: 本文为作者自己根据网上知识总结,不保证内容的完全正确性,主要是方便自己记录。

 

1.  存储组织

存储硬件分为: flash ,ram , registers and I/O ports 这4类, 它们本身没有地址,只是被 组织为线性的4g空间;

 

2.  编译后的存储

(1) 编译器在编译程序的时候统计了4类存储: code ,ro-data , rw-data 和 zi-data  , 归纳为2类 , ro  (code + ro-data)和 rw(rw-data 和 zi-data) ;

 (2)编译器在生成image文件(bin文件)的时候只包含code , ro-data ,rw-data这3个 , 而不包含zi-data ;程序运行的时候只需要把zi-data相应的ram存储区域整体清0即可;

(3)bin文件一定要有2个功能:

           a.  将rw-data从rom(flash)搬运到ram中 ,rw变量只能在程序中运行;

           b.  将zi-data在ram中的区域清0 ;

           代码再初始阶段只有完成了a和b,c程序才能访问变量,否则只能运行不包含变量的程序;

 

3.  变量类型和编译后的存储类型的对应关系

(1)ro-data 包含 常量;(表示不能再被更改)

(2)rw-data 包含 初始化的全局变量,静态变量。(表示需要保存下来初始化的数值)

(3)zi-data 包含 未初始化或者初始化为0的全局变量。

(4)局部auto变量呢 ,它不会被编译 ,只有程序运行起来之后在ram的栈中分配空间;

 

4.  堆栈和编译后的存储类型的关系

(1)堆和栈指的是程序运行中再ram中的空间 , 而编译后的存储分配指的是rom(flash)中的分配,所以堆栈和编译后的存储类型没有关系;

 

5.

0 0