C 内存分区

分区

编译:编译器编译链接烧录到芯片的代码期间

运行:芯片上电执行期间

分布

flash/rom ram
编译 code(.text),常量(.rodata),rw-data(.data)
运行 code(.text),常量(.rodata),rw-data(.data) rw-data(.data),zi-data(.bss),堆,栈

编译

code:也叫.text,只读,编译链接完成后的代码指令,cpu通过i-code总线读取;

常量:也叫.rodata,只读,运行时,cpu通过d-code总线读取;

rw-data:也叫.data,读写,编译阶段初始值非0 的全局/static变量(全局和局部),cpu通过d-code总线读取。
运行

rw-data(.data):芯片上电通过启动文件,将rw-data从flash复制到ram中,运行时cpu通过系统总线读写;

zi-data(.bss):也叫bss,读写,上电初始化时初始化为0/未初始化 的全局/static变量(全局和局部),cpu通过系统总线读写;

堆:手动分配和释放;

栈:编译器自动分配和释放。

总结

1、占用flash/rom大小:code+常量+rw-data

2、占用ram大小:rw-data+zi-data+堆+栈

3、cpu上电将rw-data复制到ram中(分析启动文件),通过i-code读取代码指令,d-code读取常量,系统总线读写ram中的rw-data、zi-data、堆、栈内容来使程序正常工作。

附:CM3总线框图

相关推荐
噜噜大王_8 小时前
深入理解 C 语言内存操作函数:memcpy、memmove、memset、memcmp
c语言·开发语言
chh56310 小时前
C++--模版初阶
c语言·开发语言·c++·学习·算法
jinyishu_12 小时前
几道链表经典算法题
c语言·数据结构·算法·链表
算法鑫探13 小时前
C语言入门:a和b 比大小
c语言·数据结构·算法·新人首发
一只小小的土拨鼠13 小时前
【国奖冲刺/全网首发】2026年第十四届“泰迪杯”A、B、C题完整解题思路、代码与高质量论文大合集
c语言·矩阵·数据挖掘
wengqidaifeng14 小时前
第十七届蓝桥杯C/C++软件赛B组算法题讲解
c语言·c++·蓝桥杯
cui_ruicheng15 小时前
Linux IO入门(一):从C语言IO到文件描述符
linux·运维·c语言
网域小星球15 小时前
C 语言从 0 入门(二十二)|内存四区:栈、堆、全局、常量区深度解析
c语言·开发语言
蚊子码农15 小时前
每日一题--C语言指针与内存泄漏:一道小问题的深度复盘
c语言·开发语言
Fanfanaas15 小时前
Linux 系统编程 进程篇(一)
linux·运维·服务器·c语言·开发语言·网络·学习