Keil/MDK编译后内存大小RO,RW,ZI理解.

  一般用 KEIL / MDK 开发cortex M系列内核MCU,编译工程后,可以在Build Output窗口看到内存大小相关的信息,如下图。并且会得到一个map文件,默认在路径:./Listings/xxx.map。

 打开map文件,直接拉到文件的最底部,可以看到如下内容:

==============================================================================


      Code (inc. data)   RO Data    RW Data    ZI Data      Debug   

     93080       5964       3868        948       3384     141071   Grand Totals
     93080       5964       3868        948       3384     141071   ELF Image Totals
     93080       5964       3868        948          0          0   ROM Totals

==============================================================================

    Total RO  Size (Code + RO Data)                96948 (  94.68kB)
    Total RW  Size (RW Data + ZI Data)              4332 (   4.23kB)
    Total ROM Size (Code + RO Data + RW Data)      97896 (  95.60kB)

==============================================================================

上面一栏:

1)Code(inc. data): 表示所有代码占用的空间;

2)RO Data:表示程序中定义的常量,const定义的变量,总共占用的空间;

3)RW Data:表示程序中定义的初始值非0的全局变量和函数内部定义的static变量;

4)ZI Data:表示程序中定义的初始化值为0的全局变量和函数内部定义的static变量;

5)inc.data:指的是inline data.

下面一栏:

1)Total RO  Size  = Code + RO Data;

2)Total RW  Size  = RW Data + ZI Data;

3)Total ROM Size = Code + RO Data + RW Data;

占用FLASH和RAM空间的计算:

1)占用FLASH空间 = Total ROM Size = Code + RO Data + RW Data;

2)占用RAM空间 = Total RW  Size  = RW Data + ZI Data;

特殊说明:

从上面可以看到,ZI Data即占用了FLASH空间又占用了RAM空间。 这是因为ZI Data数据,在固件烧录的时候是存放在FLASH中,当程序运行后,会把这部分数据拷贝到RAM中。

官方解释:

Keil/MDK编译后内存大小RO,RW,ZI理解._第1张图片Keil/MDK编译后内存大小RO,RW,ZI理解._第2张图片

 

 

你可能感兴趣的:(ARM-CM,单片机,物联网,嵌入式硬件)