一、内存分区:
-
单片机内存分布
-
中断向量表
-
.intvec
-
中断向量表段
-
-
-
代码区
-
.text
-
函数代码段,存放函数体的二进制代码。
-
-
-
数据区
-
.bss
-
未初始化及初始化为0的全局和静态变量段
-
不占用可执行文件控件,其内容由操作系统初始化(清零)
-
-
.rodata
-
常量段
-
-
.data
-
已初始化的全局和静态变量
-
占用可执行文件控件,其内容由程序初始化
-
-
-
堆
-
heap
-
动态分配数据
-
内存地址由低地址到高地址增长,用malloc等函数申请
-
-
-
栈
-
stack
-
编译器自动分配和释放
-
内存地址由高地址到低地址,先进后出;
-
存放局部变量,函数调用和返回时,其入口参数和返回值存放在栈区
-
-
-
命令行参数
-
/
-
-
二、单片机内存分布
单片机内存被总分为flash(rom)和sram(ram),flash里面的数据掉电可保存,sram中的数据掉电就丢失;
flash(rom)空间大小为Code + RO-data + RW-data的总和;
SRAM空间(即RAM区),占用的空间为RW-data + ZI-data之和;
1、Code、RO-data、RW-data和ZI-data
单片机通过keil/IAR编译后会在“Build Output”输出栏输出当前代码内存占用信息:
包括Code、RO-data、RW-data和ZI-data的大小;
1.含义
Code:代码段,存放程序的执行代码。。
存储位置:ROM
特点:只读
RO-data:数据段,存放程序定义的常量。
存储位置:ROM
特点:只读
RW-data:数据段,存放已初始化的全局变量。
存储位置:ROM和RAM
特点:可读可写
ZI-data:数据段,存放未初始化或初始化为0的全局及静态变量。
存储位置:RAM
特点:可读可写