程序的段的存储方式与存储区域大小要求

程序的存储和运行涉及 ROM(Flash/非易失性存储器)RAM(易失性存储器) 的分配,不同段在存储和运行时具有不同的特性。以下是详细的分类和计算方式:


1. 程序文件的存储方式

程序在 编译后生成的二进制文件(如 .bin/.hex) 按照以下方式存储在 ROM(Flash) 中:

段类型存储位置说明
Code段ROM存储程序的可执行代码(机器指令)
RO_data段ROM存储只读数据(如 const 常量、字符串常量)
RW_data段ROM存储已初始化且非零的全局/静态变量(初始值)
ZI_data段不存储仅记录大小,运行时在 RAM 中初始化为零

关键点

  • ZI_data段 不会占用 ROM 空间,仅记录其大小,由启动代码在 RAM 中初始化为零。
  • RW_data段 的初始值存储在 ROM 中,但运行时会被拷贝到 RAM(因为 RAM 可读写,而 ROM 不可写)。

2. 程序运行时的内存布局

程序运行时,内存(RAM)会被划分为以下部分:

段类型存储位置说明
Code段ROM 或 RAM通常直接从 ROM 执行,但某些系统可加载到 RAM(如 XIP 或加速执行)
RO_data段ROM 或 RAM通常只读,可直接从 ROM 访问,但某些情况会加载到 RAM
RW_data段RAM从 ROM 拷贝初始值到 RAM,运行时可修改
ZI_data段RAM由启动代码初始化为零
堆(Heap)RAM动态内存分配(malloc/free
栈(Stack)RAM存储局部变量、函数调用信息

在这里插入图片描述

关键点

  • RW_data段 必须加载到 RAM,因为 ROM 不可写。
  • ZI_data段 在 RAM 中分配并清零,不占用 ROM 空间。
  • 堆和栈 在运行时动态增长,不占用 ROM 空间,但必须预留足够的 RAM。

3. 存储区域的大小计算

(1) ROM(Flash)大小计算

ROM 存储的是 程序文件,其大小由以下部分组成:
ROM 大小=Code段+RO_data段+RW_data段(初始值) \text{ROM 大小} = \text{Code段} + \text{RO\_data段} + \text{RW\_data段(初始值)} ROM 大小=Code+RO_data+RW_data段(初始值)

  • ZI_data段不占用 ROM,仅记录大小。
  • RW_data段 的初始值存储在 ROM 中,但运行时会被拷贝到 RAM。

(2) RAM 大小计算

RAM 存储的是 运行时数据,其最小需求为:
RAM 最小需求=RW_data段+ZI_data段 \text{RAM 最小需求} = \text{RW\_data段} + \text{ZI\_data段} RAM 最小需求=RW_data+ZI_data
但实际 RAM 需求 必须更大,因为:

  • 堆(Heap):动态内存分配(malloc/free)需要额外空间。
  • 栈(Stack):函数调用、局部变量、中断处理等需要栈空间。

实际 RAM 需求
实际 RAM 需求=RW_data段+ZI_data段+堆大小+栈大小 \text{实际 RAM 需求} = \text{RW\_data段} + \text{ZI\_data段} + \text{堆大小} + \text{栈大小} 实际 RAM 需求=RW_data+ZI_data+堆大小+栈大小

示例

  • 如果 RW_data = 2KBZI_data = 4KB,堆预留 1KB,栈预留 1KB
    最小 RAM=2+4=6KB实际 RAM=2+4+1+1=8KB \text{最小 RAM} = 2 + 4 = 6KB \\ \text{实际 RAM} = 2 + 4 + 1 + 1 = 8KB 最小 RAM=2+4=6KB实际 RAM=2+4+1+1=8KB

4. 启动方式对存储的影响

程序运行时,代码和数据可以有不同的加载方式:

  1. 直接从 ROM 执行(XIP, eXecute In Place)

    • Code段RO_data段 直接从 ROM 读取,不占用 RAM。
    • RW_data段 从 ROM 拷贝到 RAM。
    • ZI_data段 在 RAM 中初始化为零。
    • 优点:节省 RAM,适用于 RAM 较小的嵌入式系统。
    • 缺点:ROM 访问速度可能比 RAM 慢。
  2. 全部加载到 RAM 执行

    • Code段RO_data段RW_data段 全部从 ROM 拷贝到 RAM。
    • ZI_data段 在 RAM 中初始化为零。
    • 优点:执行速度更快(RAM 访问快)。
    • 缺点:占用大量 RAM,适用于 RAM 较大的系统(如 Linux 应用)。

5. 总结

分类ROM(Flash)RAM
Code段✅ 存储❌(除非加载到 RAM 执行)
RO_data段✅ 存储❌(除非加载到 RAM 执行)
RW_data段✅ 存储初始值✅ 运行时加载
ZI_data段❌ 不存储✅ 运行时初始化为零
堆(Heap)❌ 不存储✅ 动态分配
栈(Stack)❌ 不存储✅ 运行时使用

存储大小计算

  • ROM 大小 = Code段 + RO_data段 + RW_data段(初始值)
  • RAM 最小需求 = RW_data段 + ZI_data段
  • 实际 RAM 需求 = RW_data段 + ZI_data段 + 堆 + 栈

适用场景

  • 嵌入式系统(RAM 小):直接从 ROM 执行(XIP)。
  • 高性能系统(RAM 大):全部加载到 RAM 执行。

这样,你可以根据目标设备的资源情况(ROM/RAM 大小)合理规划内存布局。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/bicheng/92255.shtml
繁体地址,请注明出处:http://hk.pswp.cn/bicheng/92255.shtml
英文地址,请注明出处:http://en.pswp.cn/bicheng/92255.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Lesson 31 Success story

Lesson 31 Success story 词汇 retire v.退休,退役[运动]去睡觉 构成:re-表示重复 tire v.感到累一tried a.累的 tyre n.轮胎 用法:retire from 单位 从…退休(过去时) 例句:他从学校退休了。 He retired from our school. retire例句: 1.他越来越老了,他即將退休。…

2025年8月4日私鱼创作平台v1.0.4公测版更新发布-完成大部分功能包含关注创作者以及发布作品及合集功能优雅草科技

2025年8月4日私鱼创作平台v1.0.4公测版更新发布-完成大部分功能包含关注创作者以及发布作品及合集功能优雅草科技 鲸鱼小说分销系统介绍 优雅草私鱼创作系统——产品介绍 系统概述 优雅草私鱼创作系统(简称“私鱼”)是一款专注于私域流量运营的垂直化…

鹧鸪云:光伏电站的“智慧中枢”,精准调控逆变器

光伏电站如星辰散落于大地,那些默默工作的逆变器便是每一处光芒的关键心脏。然而,分布广袤、设备众多,传统运维如盲人摸象,效率低下,故障难寻,白白流失宝贵电能。鹧鸪云光伏运维软件应时而生,它…

java中Reflection反射(一)

目录 一、概述 二、class类: 1、获取类的字节码文件: (1)方式一:直接通过一个class的静态变量class获取 (2)方式二:如果知道一个class的完整类名,可以通过静态方法Cl…

CVE-2021-1879

一、漏洞原理 CVE-2021-1879 是 IBM WebSphere Application Server 中存在的一个 路径遍历(Path Traversal) 漏洞,其核心原理为: ①WebSphere 在处理某些文件操作请求(如下载、上传或配置文件读取)时&#…

二进制签名查找器(Aho-Corasick 自动机):设计思路与实现原理(C/C++代码实现)

在逆向工程、恶意软件分析和二进制文件解析领域,快速准确地识别特定字节模式(即“签名”)是一项核心任务。本文将围绕一款基于PE-bear工具的二进制签名查找器,深入解析其设计思路、实现原理及相关技术背景,揭示其如何高…

後端開發技術教學(二) 條件指令、循環結構、定義函數

書接上回:後端開發技術教學(一) [附2025最新可用 phpstudy2018下載鏈接] -CSDN博客 必要資源: trae中文版下載網址: TRAE - The Real AI Engineer phpStudy 2018 : phpStudy - Windows 一键部署 PHP 开发环境 小皮出品 目录 一、條件指令 1.1 if() …

状压DP-基本框架

状压DP-基本框架一、状压DP的核心思想与适用场景1.1 问题特征1.2 核心思想1.3 与传统DP的对比二、位运算基础:状压DP的语法三、状压DP的基本框架3.1 步骤拆解3.2 通用代码模板四、经典案例详解4.1 旅行商问题(TSP)问题描述状压DP设计代码实现…

Web 端 AI 图像生成技术的应用与创新:虚拟背景与创意图像合成

随着 Stable Diffusion、Midjourney 等生成式 AI 模型的爆发,Web 端图像生成技术从“实验室demo”走向“工业化应用”。其中,虚拟背景替换(如视频会议的动态背景生成)和创意图像合成(如用户上传素材与 AI 生成元素的融合)成为最具代表性的场景,它们通过“文本描述→AI 生…

应急响应知识总结

应急响应 Windows系统 查账号 1、查看服务器是否有弱口令,远程管理端口是否对公网开放。 检查方法:据实际情况咨询相关服务器管理员。 2、查看服务器是否存在可疑账号、新增账号。 检查方法:打开 cmd 窗口,输入 lusrmgr.msc …

智慧水务赋能二次供水管理精细化转型:物联网驱动的全链路解决方案

随着我国城镇化率激增,高层建筑占比上升,二次供水系统已成为保障城市供水安全的核心环节。然而,传统管理模式面临设备老化、运维粗放、监管缺失等矛盾,在此背景下,《“十四五”节水型社会建设规划》明确要求推进二次供…

tsmc 5nm lvs之 short难搞的类型

1、M3层以上的层次发生的short,dengsity很高的情况下,两根信号net导致的short,删除其中一根然后ecoRoute fix不掉的情况下,该怎么办,可以尝试去cut 周围或者上方的power。 2、M1, M2由于cell 内部出pin&…

初识神经网络01——认识PyTorch

文章目录一、认识PyTorch1.1 PyTorch是什么1.2 安装PyTorch二、认识Tensor2.1 创建Tensor2.1.1 基本方式2.2.2 创建线性和随机张量2.2 Tensor属性2.2.1 切换设备2.2.2 类型转换2.3 Tensor与Numpy的数据转换2.3.1 张量转ndarray2.3.2 Numpy转张量2.4 Tensor常见操作2.4.1 取值2.…

Android UI 组件系列(十一):RecyclerView 多类型布局与数据刷新实战

博客专栏:Android初级入门UI组件与布局 源码:通过网盘分享的文件:Android入门布局及UI相关案例 链接: https://pan.baidu.com/s/1EOuDUKJndMISolieFSvXXg?pwd4k9n 提取码: 4k9n 引言 在 Android 应用中,RecyclerView 是最常用…

如何学习跨模态对齐(尤其是 CLIP 思想)

学习跨模态对齐(尤其是CLIP思想)需要结合理论基础、经典模型原理、实践复现和前沿扩展,以下是一套系统的学习路径,从入门到深入逐步展开: 一、先补基础:跨模态对齐的“前置知识” 跨模态对齐的核心是让图…

日记研究:一种深入了解用户真实体验的UX研究方法

在用户体验(UX)研究中,我们常常需要了解用户在真实世界中如何与产品互动。然而,由于时间和空间的限制,我们很难像“特工”一样全天候跟踪用户。这时,“日记研究”(Diary Studies)就成…

鸿蒙app 开发中 加载图片的时候闪一下 如何解决

1.解决 在图片上 加载这个属性 .syncLoad(true) 参考的官方链接

【OS】进程与线程

进程进程实体代码段相关数据PCB进程标识符外部标识符:为方便用户对进程的访问,为每个进程设置一个外部标识符,通常由字母和数字组成内部标识符:为方便系统对进程的使用,在OS中又为进程设置了内部标识符,赋予…

Django 序列化详解:从 Model 到 JSON,全面掌握数据转换机制

一、引言:什么是 Django 序列化?在 Web 开发中,序列化(Serialization) 是指将复杂的数据结构(如数据库模型对象)转换为可传输的格式(如 JSON、XML、YAML 等),…

茶叶蛋大冒险小游戏流量主微信抖音小程序开源

游戏特点 响应式设计:完美适配各种移动设备屏幕尺寸 直观的触摸控制:左右滑动屏幕控制茶叶蛋移动 中式风格元素: 茶叶蛋角色带有裂纹纹理和可爱表情 筷子、蒸笼等中式厨房元素作为障碍物 八角、茶叶等香料作为收集物 锅底火焰动画效果 游戏机…