当前位置: 首页 > news >正文

.text 段的内存和.rodata的内存区别

结论

物理存储上:都存放在 Flash,地址连续、同一块物理存储芯片,硬件无分区隔离;逻辑 / 访问权限 / CPU 机制上:完全分开,用途、保护、加载规则不同

一、物理层面(硬件 Flash)

  1. 同一片 Flash 存储颗粒.text(Code)+.rodata(常量字符串 /const)+.data初始化副本 全部烧录在同一块 Flash,物理介质没有隔断,只是链接脚本分配了不同地址区间。
  2. 读操作硬件通路完全一样CPU 通过 Flash 控制器读取指令、读取常量数据,走同一套读取总线;Flash 硬件本身不区分这段存的是代码还是字符串。
  3. 擦写特性一致Flash 只能整块擦除、按页编程,不会区分.text.rodata区域。

简单说:硬件看不出两者区别,只是链接器人为划分地址区间

二、逻辑、访问、权限上的本质区别(重点)

1. .text 段(程序代码)

存放:函数汇编指令、中断函数、运算逻辑

  1. CPU 访问方式:取指操作 I-FetchCPU PC 指针指向该区域,读取机器码执行;
  2. 访问权限:只读,禁止数据写访问多数单片机 MPU / 存储器保护单元会配置:.text 区域只允许指令读取,禁止普通数据读写;如果代码里指针强行修改 .text 地址,直接触发内存访问异常 HardFault;
  3. 内容:二进制机器指令,不能被代码当成普通数据遍历修改。

2. .rodata 段(只读常量)

存放:字符串字面量、const全局常量、只读查找表

  1. CPU 访问方式:数据读取 D-Fetch用普通指针、数组下标读取,不是 PC 取指令;
  2. 访问权限:同样只读,但权限属性是「只读数据区」;MPU 配置为允许数据读,不允许写,不允许当成指令执行;如果跳转到 rodata 地址当作函数执行,会取到乱码数据当指令,直接死机;
  3. 用途:纯数据,没有可执行指令。

三、举个直观例子

c

运行

const char log_str[] = "val=%d\n"; // 存在 .rodata void cal_coulometer(uint32_t vbat)// 函数指令存在 .text { unsigned int val=100; LOG(log_str,val); }
  1. CPU 运行 cal_coulometer:PC 指针去.text拿指令执行;
  2. 打印时读取字符串:D 总线去.rodata拿字符串字节;两块物理上挨在一起在 Flash,但 CPU 硬件层面区分「指令总线」「数据总线」访问。

四、补充两个容易混淆的点

  1. 会不会放到不同 Flash 分区?不会,普通 MCU 单块 Flash,链接脚本只是划分虚拟地址;只有带多块独立 Flash 芯片的高端芯片才会物理分开。
  2. 和 RAM 对比区分.text/.rodata 全程在 Flash,运行时不拷贝到 RAM;RW-data/ZI (.bss) 是运行时拷贝 / 清零到 RAM,物理介质完全不同。

总结

  • 物理硬件:无区别,同一块 Flash,同一套读写电路;
  • 逻辑 / CPU 总线 / 权限:有严格区分,一个是指令区,一个是只读数据区,不能混用
http://www.jsqmd.com/news/1093863/

相关文章:

  • 乌鲁木齐公考机构口碑红黑榜:学员真实评价大公开(2026选择指南)
  • 用 Claude API 把零散信息整理成能落地的任务清单
  • 如何在Mac上配置OBS虚拟摄像头:终极完整指南
  • 2026年一键生成论文工具推荐
  • 跳出论文熬夜怪圈:okbiye 一站式 AI 毕业论文写作
  • 滩涂垃圾清理新突破与挑战
  • CSGO 开箱网源码全链路实测:PHP 后端与 Vue 前端的支付对接验证
  • 小白实操记录:VMware 安装 Ubuntu Linux 全过程
  • 多 Agent 协作流水线——从单打独斗到团队作战
  • 2026年光谱亮度计技术演进:从点测到面阵的精密测量之路
  • 终极免费KVM软件指南:用Barrier一套键鼠控制多台电脑的完整教程
  • 新手水产人必藏!吸水粉配比、制袋、用量全套实操教程
  • 51camera隧道综合巡检机器人 守护隧道安全
  • C语言实现RC4流密码算法:从原理到工程实践
  • 上位机MODBUS读写线圈和用寄存器当线圈操作
  • 数字人交互源码:一体机私有化部署方案
  • Manim实现动态交点计算--从一个动点问题说起
  • 行为型模式:对象之间的默契配合
  • Selenium脚本性能优化实战:从等待策略到并行执行
  • LongCat 开源 VitaBench 2.0:长期动态智能体基准新标杆
  • 高并发架构优化实战:Redis 调优、数据库扩展与协同架构三大核心模块
  • Dify工作流自动化测试与文生图优化实战指南
  • 黄金短期有震荡筑底倾向
  • 用 AI 一句话查 A 股数据,免费替代 Tushare(附完整教程)
  • 中台建了、仓库搭了、报表做了,为什么业务还是要Excel?——从DAMA知识体系看数据中台治理落地的工程方法论
  • 15种AI Agent设计模式,做Agent的人迟早都要用上
  • Rhino 8 Mac免费版下载安装教程(附安装包)Rhino 8 Mac 保姆级安装教程
  • 6款论文降AIGC平台亲测:AI率直降安全线,学生党必入平价款
  • 独立开发者如何使用 CSGClaw 管理复杂开发任务
  • 数字隔离器与光耦合器:筑牢舞台表演机器人运行核心基石