参考文章
存储空间
分区说明
区域 | 作用 |
---|
内存栈区 | 由编译器自动分配释放,存放函数的参数值、返回值和局部变量 |
内存堆区 | 存放new或者malloc出来的动态内存分配 |
代码区 | 存放CPU执行的机器指令,共享只读 |
全局区 | 存放全局变量、静态变量、常量 |
全局区分为data区、bss区(Block Started by Symbol)
区域 | 作用 |
---|
data | 存放已经初始化的全局变量、静态变量和常量 |
bss | 存放未初始化的全局变量和静态变量,并在程序执行之前会自动初始化为0或NULL |
参考文章
STM32 Keil环境分区
区域 | 作用 | 例子 |
---|
Code | 存储程序代码 | 执行代码,函数实现 |
RO-data | 存储const常量和指令 | 只读数据,全局常量数据和字符串 |
RW-data | 存储初始化值不为0的全局变量 | 已初始化的读写数据,程序中定义并且初始化的全局变量和静态变量 |
ZI-data | 存储未初始化的全局变量或初始化值为0的全局变量 | 未初始化的读写数据,程序中定义了但没有初始化的全局变量和静态变量 |
Flash=Code + RO-data + RW-data
RAM= RW-data + ZI-data
参考文章1
参考文章2
参考文章3
变量种类
局部变量
- 局部变量作用域局限于调用函数当中
- 局部变量的内存空间是在栈区的,由OS进行申请和释放
- OS不会对未初始化的局部变量设初值,一般是一个随机值
全局变量
- 位于函数体之外
- 生命周期伴随整个程序
静态变量
静态全局变量
- 性质如同全局变量
- 静态全局变量只能在当前的源文件中使用,不可跨文件使用
静态局部变量
- 作用域同样局限于调用函数之中
- 变量存储于全局静态区,不位于栈
- 生命周期同整个程序