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

相关推荐
山登绝顶我为峰 3(^v^)31 天前
C/C++ 交叉编译方法
java·c语言·c++
LONGZETECH1 天前
新能源汽车动力电池检测仿真教学系统:C/S 分层架构与数字化实训落地全解析
大数据·c语言·开发语言·人工智能·架构·系统架构·汽车
legendary_1631 天前
SINK芯片:Type-C统一供电时代的小家电核心方案
c语言·开发语言·人工智能·智能手机
_Doubletful1 天前
妙用位运算:解构汉明距离至100%(提供分析与多解)
c语言·算法·leetcode
shx_wei1 天前
从函数调用到进程替换:使用 execl、CMake 与 PowerShell 构建一个多可执行程序
linux·c语言·windows·c
李小小钦2 天前
D. Storming Arasaka(Codeforces 2238)
c语言·开发语言·数据结构·c++·算法
gugucoding2 天前
21. 【C语言】打包不同类型:结构体
c语言·开发语言
gugucoding2 天前
31. 【C语言】堆栈与队列的实现
c语言·开发语言·数据结构·链表
Yang_jie_032 天前
笔记:数据结构(C语言版)第一章知识点详细归纳
c语言·数据结构·算法
czhaii2 天前
串口1中断收发-C语言-MODBUS协议
c语言·开发语言