类别 | 定义与功能 | 位置 | 生命期 | 实例 |
---|---|---|---|---|
Code | 编译器生成的机器指令 | ROM区 | 从编译到执行始终存在 | C语言函数体 |
RO Data | 程序中的只读数据 | ROM区 | 从编译到执行始终存在 | const 关键字定义的变量 |
RW Data | 初始化为非0值的可读写数据 | 程序存储时位于ROM区,运行时位于RAM区 | 程序存储时位于ROM区,运行时加载到RAM区并可被修改 | 全局变量且赋予非0值初始化 |
ZI Data | 初始化为0值的可读写数据 | 程序存储时不占用ROM区空间,运行时位于RAM区 | 程序运行时在RAM区分配空间并初始化为0,然后可被修改 | 全局变量且赋予0值初始化或未初始化的全局变量、栈空间和堆空间中的未初始化数据 |
一、定义与功能
-
Code
- 定义:Code指的是编译器生成的机器指令,这些指令被存储到ROM区(如STM32的内部Flash中),用于程序的执行。
- 功能:Code是程序的核心部分,包含了程序执行所需的所有指令。
- 位置:存储在ROM区。
- 实例:C语言编写的函数体,经过编译后生成的机器指令就是Code的一部分。
-
RO Data
- 定义:RO Data指的是程序中用到的只读数据,这些数据被存储在ROM区,程序不能修改其内容。
- 功能:RO Data用于存储程序中不需要修改的数据,如常量、字符串字面量等。
- 位置:存储在ROM区。
- 实例:C语言中
const
关键字定义的变量,如const int a = 10;
,这里的a
就是RO Data。
-
RW Data
- 定义:RW Data指的是初始化为“非0值”的可读写数据,这些数据在程序运行时会被加载到RAM区。
- 功能:RW Data用于存储程序中需要修改且初始值非0的数据。
- 位置:程序存储时位于ROM区,程序运行时加载到RAM区。
- 实例:C语言中全局变量且定义时赋予“非0值”进行初始化,如
int b = 20;
,这里的b
就是RW Data。
-
ZI Data
- 定义:ZI Data指的是初始化为“0值”的可读写数据,这些数据在程序运行时也会被加载到RAM区。
- 功能:ZI Data用于存储程序中需要修改但初始值为0的数据。
- 位置:程序存储时不占用ROM区(因为初始值为0,无需存储),程序运行时在RAM区分配空间并初始化为0。
- 实例:C语言中全局变量且定义时赋予“0值”进行初始化,如
int c = 0;
(或未初始化,编译器默认初始化为0的全局变量),这里的c
就是ZI Data。另外,栈空间和堆空间中的未初始化数据也属于ZI Data,这些空间在程序运行时被初始化为0。
二、生命期
-
Code
- 生命期:从程序编译生成到程序执行结束,Code始终存在于ROM区中,内核直接从ROM中读取指令执行。
-
RO Data
- 生命期:与Code类似,RO Data从程序编译生成到程序执行结束始终存在于ROM区中。
-
RW Data
- 生命期:程序存储时,RW Data位于ROM区;程序运行时,RW Data被加载到RAM区,并可在程序执行过程中被修改。
-
ZI Data
- 生命期:程序存储时,ZI Data不占用ROM区空间;程序运行时,ZI Data在RAM区分配空间并初始化为0,然后可在程序执行过程中被修改。
三、同异点对比
同点:
- Code、RO Data、RW Data在程序存储时都占用ROM区空间(RW Data在运行时加载到RAM区)。
- 它们都是程序的重要组成部分,对程序的执行起着关键作用。
异点:
- 功能和用途不同:Code包含程序执行的指令,RO Data存储只读数据,RW Data和ZI Data存储可读写数据但初始值不同。
- 位置和生命期不同:Code和RO Data始终存在于ROM区中,而RW Data在程序运行时被加载到RAM区,ZI Data在程序运行时在RAM区分配空间并初始化为0。
标签:初始化,存储,RW,ROM,Data,RAM,Code,数据 From: https://blog.csdn.net/m0_59091453/article/details/145121365