引用博客:C语言+单片机-内存分布详解,全网最全,值得收藏保存_单片机内存_Sunshine-Linux的博客-CSDN博客
一段话概括:
分两种大情况:
一:C语言内存分区
1.首先C语言内存分区分为 :内核,栈,堆,数据段,代码段
2.内核段
3.栈区是向下增长的(高地址向低地址),用于存放局部变量,命令行参数,环境变量
4.堆区是向上增长的(类似于堆沙子,低地址向高地址),是程序员自己通过malloc、calloc、free等函数来分配的
5.数据段:包括.bss,.data,.rodata;其中.bss存放未初始化的静态数据,.data存放已初始化的静态数据
.rodata存放只读的变量,如const
6.代码段:用于存放代码,包括:.text用户代码,.init系统初始化代码
二:单片机的内存分布
首先单片机的内存分布分为两个大区:ram和rom(flash)
1.ram:包括包括RW-data和ZI-data
其中:
RW-data包括堆区,栈区,和全局变量区;这里的全局变量是已经初始化的全局变量和静态变量,即.data
ZI-data存放未初始化和初始化为零的全局变量和静态变量,即.bss
2.rom,即flash,用于存放代码code和RO-data(数据段,指程序中的只读数据部分,包括常量、字符串、const定义的变量等)