参考文章 存储空间 分区说明 区域作用内存栈区由编译器自动分配释放,存放函数的参数值、返回值和局部变量内存堆区存放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不会对未初始化的局部变量设初值,一般是一个随机值 全局变量 位于函数体之外生命周期伴随整个程序 静态变量 静态全局变量 性质如同全局变量静态全局变量只能在当前的源文件中使用,不可跨文件使用 静态局部变量 作用域同样局限于调用函数之中变量存储于全局静态区,不位于栈生命周期同整个程序