KEIL MDK 查看代码量、RAM使用情况--RO-data、RW-data、ZI-data的解释(转) - 酒醉的Tiger - 博客园源:KEIL MDK 查看代码量、RAM使用情况--RO-data、RW-data、ZI-data的解释KEIL RVMDK编译后的信息Program Size: Code=86496 RO-datahttps://www.cnblogs.com/LittleTiger/p/4812523.html
Code:代码空间
RO-data是 Read Only 只读常量的大小,如const型;
RW-data: 可读可写的,已经初始化的全局变量
ZI-data:未初始化或者初始化为0的全局变量
简单的说就是在烧写的时候是FLASH中的被占用的空间为:Code + RO Data + RW Data
程序运行的时候,芯片内部RAM使用的空间为: RW Data + ZI Data
BSS段(好像和ZI-data是一样的):保存未初始化或初始化为0的全局变量,这种全局变量再bss段里面都会被清成0,为了移植方便最好都初始化成0
DATA段:保存非0的非const的全局变量 如果这个数据全为0编译器就会启动优化到bss段里面
RO_DATA段:只读(read_only)区域,保存const修饰的常量,不是全部的常量都保存再这的,有的立即数直接编码在指令里,存放在代码段(.text)中,
对于字符串常量,编译器会自动去掉重复的字符串,保证一个字符串在一个可执行文件(EXE/SO)中只存在一份拷贝
rodata是在多个进程间是共享的,这可以提高空间利用率。
在有的嵌入式系统中,rodata放在ROM(如norflash)里,运行时直接读取ROM内存,无需要加载到RAM内存中。
在嵌入式linux系统中,通过一种叫作XIP(就地执行)的技术,也可以直接读取,而无需要加载到RAM内存中。
violatile关键字通常用来修饰多线程共享的全局变量和IO内存。告诉编译器,不要把此类变量优化到寄存器中,每次都要老老实实的从内存中读取,因为它们随时都可能变化。