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

相关推荐
weixin_421725261 小时前
C语言是一种通用的计算机编程语言,广泛应用于各类
c语言·计算机·编程语言·软件开发·历史演变
不断提高1 小时前
别再写 while(1) 死循环了,嵌入式开发该换个活法
c语言·嵌入式硬件·嵌入式·状态模式
bucenggaibian1 小时前
为什么有这么多以字母 “C” 为开头的编程语言?
c语言·编程语言·历史·发展·家族
bucenggaibian2 小时前
C语言超级全面的学习平台
c语言·sqlite·easylogger·pat练习·tencentos-tiny
50万马克的面包2 小时前
三子棋小游戏(C语言详解)
c语言·开发语言·算法
我不是懒洋洋3 小时前
AC自动机:从KMP到多模式匹配,敏感词过滤神器
c语言
无限进步_3 小时前
【C++】AVL树完全解析:从平衡因子到四种旋转
c语言·开发语言·数据结构·c++·后端·算法·github
嵌入式小杰4 小时前
一阶低通滤波入门教程:从原理到单片机 C 代码实现
c语言·开发语言·stm32·单片机·算法
学会去珍惜4 小时前
8天学会C语言编程第2天:变量、数据类型和输入/输出,3分钟上手
c语言·实战·变量·编程入门·输入输出
流年如夢4 小时前
顺序表的应用 --> 简单通讯录的实现
c语言·数据结构