ZI-data RO-data RW-data Code BSS DATA

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的全局变量

编译完工程会生成一个. map 的文件,该文件说明了各个函数占用的尺寸和地址,在文件的最后几行也说明了上面几个字段的关系:

1) RO Size 包含了 Code 及 RO-data,表示程序占用 Flash 空间的大小;
2) RW Size 包含了 RW-data 及 ZI-data,表示运行时占用的 RAM 的大小;
3) ROM Size 包含了 Code、 RO Data 以及 RW Data,表示烧写程序所占用的 Flash 空间的大小;
 

简单的说就是在烧写的时候是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内存。告诉编译器,不要把此类变量优化到寄存器中,每次都要老老实实的从内存中读取,因为它们随时都可能变化。 

你可能感兴趣的:(笔记,arm)