首页 > 其他分享 >Code、RO Data(ReadOnly Data,只读数据)、RW Data(ReadWrite Data,可读写数据)和ZI Data(Zero Initialized Data,0初始化数据)

Code、RO Data(ReadOnly Data,只读数据)、RW Data(ReadWrite Data,可读写数据)和ZI Data(Zero Initialized Data,0初始化数据)

时间:2025-01-13 18:57:49浏览次数:3  
标签:初始化 存储 RW ROM Data RAM Code 数据

类别定义与功能位置生命期实例
Code编译器生成的机器指令ROM区从编译到执行始终存在C语言函数体
RO Data程序中的只读数据ROM区从编译到执行始终存在const关键字定义的变量
RW Data初始化为非0值的可读写数据程序存储时位于ROM区,运行时位于RAM区程序存储时位于ROM区,运行时加载到RAM区并可被修改全局变量且赋予非0值初始化
ZI Data初始化为0值的可读写数据程序存储时不占用ROM区空间,运行时位于RAM区程序运行时在RAM区分配空间并初始化为0,然后可被修改全局变量且赋予0值初始化或未初始化的全局变量、栈空间和堆空间中的未初始化数据

一、定义与功能

  1. Code

    • 定义:Code指的是编译器生成的机器指令,这些指令被存储到ROM区(如STM32的内部Flash中),用于程序的执行。
    • 功能:Code是程序的核心部分,包含了程序执行所需的所有指令。
    • 位置:存储在ROM区。
    • 实例:C语言编写的函数体,经过编译后生成的机器指令就是Code的一部分。
  2. RO Data

    • 定义:RO Data指的是程序中用到的只读数据,这些数据被存储在ROM区,程序不能修改其内容。
    • 功能:RO Data用于存储程序中不需要修改的数据,如常量、字符串字面量等。
    • 位置:存储在ROM区。
    • 实例:C语言中const关键字定义的变量,如const int a = 10;,这里的a就是RO Data。
  3. RW Data

    • 定义:RW Data指的是初始化为“非0值”的可读写数据,这些数据在程序运行时会被加载到RAM区。
    • 功能:RW Data用于存储程序中需要修改且初始值非0的数据。
    • 位置:程序存储时位于ROM区,程序运行时加载到RAM区。
    • 实例:C语言中全局变量且定义时赋予“非0值”进行初始化,如int b = 20;,这里的b就是RW Data。
  4. 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。

二、生命期

  1. Code

    • 生命期:从程序编译生成到程序执行结束,Code始终存在于ROM区中,内核直接从ROM中读取指令执行。
  2. RO Data

    • 生命期:与Code类似,RO Data从程序编译生成到程序执行结束始终存在于ROM区中。
  3. RW Data

    • 生命期:程序存储时,RW Data位于ROM区;程序运行时,RW Data被加载到RAM区,并可在程序执行过程中被修改。
  4. 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

相关文章

  • 基于DPDK的用户态协议栈(2)基于DPDK实现UDP的数据接收
    注:本文只实现了数据接收部分一、使用DPDK实现UDP的数据接收流程1.1初始化EALmain(intargc,char*argv[]){//main函数的标准参数,用于接收命令行参数。argc表示参数的数量,argv是一个指向字符串数组的指针,这些字符串是传递给程序的命令行参数。//初始化EAL。if(......
  • 中文领域确实存在一些与OpenBookQA类似的问答数据集
    中文领域确实存在一些与OpenBookQA类似的问答数据集,这些数据集旨在促进机器阅读理解和问答系统的研究和发展。以下是几个值得注意的中文问答数据集:cMedQA和cMedQA2:这两个数据集专注于医疗领域的问答任务,包含大量的医学相关问题及其对应的回答。具体来说,cMedQA包含大约5......
  • C#中的数据类型
    C#是一种强类型语言,无论是变量、常量,还是方法的参数、返回值,都需要指定相应的数据类型。从某种意义上来说,数据类型就像数据结构的模板,它包含了很多信息:一种数据类型所需要的内存空间;该数据类型的取值范围,即它可以表示的最大值和最小值;它所继承的基类信息;运行时它在内存......
  • Milvus:高性能向量数据库的安装与实战
    Milvus:高性能向量数据库简介Milvus是一个专为存储、索引和管理由深度神经网络及其他机器学习模型生成的大规模嵌入向量(embeddingvectors)而设计的数据库。它支持高效的向量检索,并且非常适合用于语义搜索、推荐系统、图像检索等应用场景。在本文中,我们将从安装Milvus......
  • 【最新原创毕设】基于SSM的在线学习平台+09650(免费领源码)可做计算机毕业设计JAVA、PHP
    目 录摘要1绪论1.1选题背景及意义1.2国内外现状分析1.3论文结构与章节安排2 在线学习平台系统分析2.1可行性分析2.2系统业务流程分析2.3系统功能分析2.3.1功能性分析2.3.2非功能性分析2.4系统用例分析2.5本章小结3在线学习平台总体设......
  • LeetCode 热题 HOT 100
    点个关注,不迷路!(╯▽╰)好香~~在学习过程中,借助一些优秀的工具可以极大地提升我们的学习效率。例如,使用LeetCode插件,它能够帮助你显示力扣周赛难度分数,让你更好地了解题目的难度,从而合理安排学习计划。算法学习路线推荐基础夯实:先过B站“灵茶山艾府”的“基础算法......
  • 医学图像分析工具08:BrainSuite || 用 BrainSuite 处理 MRI 数据的完整流程 模块化、图
    BrainSuite:强大的神经影像分析工具BrainSuite是另一个广受神经科学研究人员喜爱的神经影像学分析工具。与FreeSurfer类似,BrainSuite的设计目标是通过高效的算法和简洁的界面帮助用户处理和分析MRI数据,但它更注重提供模块化、直观的操作体验。接下来,我们将详细探讨Br......
  • leetcode周赛432 T4(单调栈 + 单调队列)
    一道练习单调栈+单调队列的好题题目链接:problem对于求合法子数组数量的题目,可以先考虑传统的枚举右端点,二分左端点的套路。此题用这种方法恰好可行,因为对于一个序列,左端增加一个数不会让操作数更少。因此对于固定右端点,合法的左端点一定是一段区间。所以现在问题转化为:用双指......
  • LeetCode刷题笔记(Day3)【滑动窗口+螺旋矩阵】
    题号:209.长度最小的子数组力扣题目链接        【注意】:数组所有元素之和都小于target时,要设置返回0,否则会返回INT_MAX 904.水果成篮76.最小覆盖子串【T中字符不按顺序出现也算,T中可能包含重复字符】        76有示例没过去,贴在文章后面啦,希望......
  • springboot+vue的河南天气数据分析与可视化系统python-计算机毕业设计
    目录功能和技术介绍具体实现截图开发核心技术:开发环境开发步骤编译运行核心代码部分展示系统设计详细视频演示可行性论证软件测试源码获取功能和技术介绍该系统基于浏览器的方式进行访问,采用springboot集成快速开发框架,前端使用vue方式,基于es5的语法,开发工具Intelli......