# 程序内存布局 ## 存储分布 Code:代码域,编译器生成的机器指令,只存储在Flash区。属于Text段; RO_Data:只读数据域,只存储在Flash区,例如C语言的const变量。属于DATA段; RW_Data:可读写数据域,初始化非0的全局变量和static 变量,存储在Flash区,运行时候拷贝到RAM区。属于DATA段; ZI_Data:初始值为0的全局变量和static 变量数据域,栈空间(Stack)及堆空间(Heap),只在RAM中。属于Bss段; 栈:函数内部定义的局部变量属于栈空间,进入函数的时候从向栈空间申请内存给局部变量,退出时释放局部变量,归还内存空间,**后进先出**,先进入的最后出来,只在Ram区; 堆:使用malloc 动态分配的变量属于堆空间,只在Ram区。 综上:当程序存储在Flash中时,所占用的大小为Code + RO_data + RW_data 。运行时占用Ram大小为Heap+Stack+RW_Data。 ![image-20200322095233071](media/image-20200322095233071.png)