1、code、RW、ZI、RO认识
code:代码存储,在ROM中,掉电不丢失;
RW:可读可写变量,既在ROM中,又在RAM中存储;
ZI:初始化为0的变量,存储在RAM中;
RO:只读,存储在ROM中。
2、RAM、ROM统计公式
RAM = RW + ZI;
ROM = code + RW + RO;
示意图如下:
3、内存五大分区
堆区(Heap):运行时程序new分配的,也就是应用程序申请的,由应用程序自行申请和释放。
栈区(Stack):运行时为保持信息临时申请的,结束后释放,例如函数的参数、内部申请的非静态变量等信息。
自由存储区:由malloc申请,free释放,系统层面管理。
全局和静态存储区:全局变量和静态变量分配的区域,是否初始化,分配会位置会不一样。
常量存储区:存储常量,例如字符串、const修饰变量等等。
4、内存分区与存储区域对应关系
代码段(CODE DATA):执行的机器码组成,存储在ROM。
只读数据段(RO DATA):存储程序中不可更改的数据,常量存储区属于这里,存储在ROM。
已初始化可读可写数据段(RW DATA):程序中已定义,并且进行初始化的数据,全局和静态存储区中已经初始化的数据在这里存储,既存储
在ROM,又存储在RAM。
未初始化数据段(BSS):程序中已定义,并且未初始化的数据,全局和静态存储区中未初始化的数据在这里存储,存储在RAM内。
堆和栈:程序运行时,从RAM中申请分配的。
问题:const修饰的变量是如何存储的?
5、常见一些情况的存储剖析