Code、RO-data、RW-data、ZI-data
| Program Size | 说明 | 数据 |
|---|
| Code | 代码域,编译器生成的机器指令,存储到ROM区 | 机器指令 |
| RO-data | Read only data,只读数据域,程序中用到的只读数据,这些数据被存储在ROM区,因而程序不能修改其内容,C语言中const关键字定义的变量就是典型的RO-data | 常量 |
| RW-data | Read Write data,可读写数据域,它指初始化为非0的可读写数据,程序刚运行时,这些数据具有非0的初始值,且运行的时候常驻RAM区,因而应用程序可以修改其内容,C语言中定义的非0值全局变量 | 初值非0的全局变量 |
| ZI-data | Zero Initialie data,即初始化为0的数据域,它指初始化为0值的可读写数据域。它与RW-data的区别是程序刚运行时这些数据初始值都为 0,而后续运行过程与RW-data的性质一样,也常驻RAM区,因而应用程序可以更改其内容。C语言中定义的全局变量,且定义时赋予0值给该变量进行初始化,若定义该变量时没有赋予初始值,编译器会把它当ZI-data来对待,初始化为 0
ZI-data 的栈空间(Stack)及堆空间(Heap):在C语言中,函数内部定义的局部变量属于栈空间,进入函数的时候会向栈空间申请内存给局部变量,退出时释放局部变量,归还内存空间。而使用malloc动态分配的变量属于堆空间。在程序中的栈空间和堆空间都是属于ZI-data区域的,这些空间都会被初始值化为0值。编译器给出的ZI-data占用的空间值中包含了堆栈的大小 | 初值为0的全局变量、局部变量 、malloc动态分配的空间 |
Program Size
| 区域 | 组成 |
|---|
| 只读区域(RO) | Code + RO-data |
| 读写区域(RW) | RW-data + ZI-data |
| 程序大小(ROM) | Code + RO-data + RW-data |
| 运行时内存(RAM) | RW-data + ZI-data |