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总线框图

相关推荐
山下梅子酒22510 小时前
洛谷-入门-B2079
c语言
Mr_Macallon12 小时前
C++回顾(基础)(01)
c语言·开发语言·c++·学习
wuminyu13 小时前
LockStack在虚拟线程Mount和Unmount拷贝过程剖析
java·linux·c语言·jvm·c++
Felven13 小时前
B. Reverse a Permutation
c语言
Logic10113 小时前
C语言/数据结构排序题解:三个数的最大乘积——排序后比较两种候选情况
c语言·数据结构·数组·排序·时间复杂度·算法题·负数处理
无忧.芙桃14 小时前
位图妙用:512MB 实现 40 亿整数的存在性查询
c语言·c++·面试·哈希算法
听风若依14 小时前
数据在内存中的存储-纸面笔记整理
c语言·笔记
殷色玫瑰15 小时前
C++ string类详解:常用接口、字符串操作与模拟实现
java·linux·c语言·开发语言·数据结构·c++
Code_Solitude15 小时前
C语言:关于二维数组的作业总结
java·c语言·前端
老花眼猫16 小时前
数学艺术图案画-曼陀罗(93)
c语言·经验分享·青少年编程·课程设计