寫在前面 Ⅰ
Program Size:Code=2596RO-data=268RW-data=44ZI-data=1028
72 765 bytes ofreadonly codememory
3 508 bytes ofreadonly datamemory
20 202 bytes ofreadwrite datamemory
5 676 bytes ofCODEmemory
926 bytes ofCONSTmemory
1 148 bytes ofDATAmemory
相信大家都看到過上面的信息,應該都知道它們大概的意思,但關于存儲這一塊的細節知識又有多少朋友去深入理解過呢?
要知道代碼、常量、全局、局部變量存儲在哪兒,就需要了解FLASH和RAM的一些特性,在工程中要具體分析其大小及對應存儲地址,可以從map文件中分析。
簡要說明其意思 Ⅱ
為了照顧大部分人,簡要說一下上面打印信息的意思。微主這里提醒一下大家,網上也有一大堆相關資料,但網上好些資料說的有歧義,可能會誤導大家,如:RW-data為已初始化的全局變量。加了static修飾的變量叫靜態變量,和全局變量還是存在差別,但已初始化的靜態變量也會歸為RW-data中。
1.Keil編譯窗口信息
Program Size:Code=2596RO-data=268RW-data=44ZI-data=1028
Code:指代碼的大小;
Ro-data:指除了內聯數據(inline data)之外的常量數據;
RW-data:指可讀寫(RW)、已初始化的變量數據;
ZI-data:指未初始化(ZI)的變量數據;
Code、Ro-data:位于FLASH中;
RW-data、ZI-data:位于RAM中;
提醒:RW-data已初始化的數據會存儲在Flash中,上電會從FLASH搬移至RAM中。
關系如下:
RO Size= Code + RO Data
RW Size= RW Data + ZI Data
ROM Size = Code + RO Data + RW Data
2.IAR編譯窗口信息
IAR存在兩種情況,但意思都差不多,只是顯示不一樣:
編譯工程(點擊Make),會出現如下信息:
72 765 bytes ofreadonly codememory
3 508 bytes ofreadonly datamemory
20 202 bytes ofreadwrite datamemory
編譯單個文件(點擊Compile),會出現下面信息(若沒有DATA就沒有那一行):
5 676 bytes ofCODEmemory
926 bytes ofCONSTmemory
1 148 bytes ofDATAmemory
readonly code:代碼大小(類似于CODE);
readonly data:常量數據(類似于CONST);
readwrite data:可讀寫變量數據(類似于DATA);
說明:
IAR中的Data相當于Keil中RW Data + ZI Data
內存(RAM)分配 Ⅲ
本節擴展一下RAM的一些知識,有助于大家對程序運行時RAM的情況。
內存分為5類:
1、棧區(stack): 由編譯器自動分配和釋放 ,存放函數的參數值,局部變量的值等。
2、堆區(heap) : 一般由程序員(使用malloc)分配和(使用free)釋放, 若程序員不釋放,則一直被占用。一般來說,單片機類的程序一般沒有使用堆。
3、全局區(靜態區)(static):全局變量和靜態變量的存儲是放在一塊的,初始化的全局變量和靜態變量在一塊區域, 未初始化的全局變量和未初始化的靜態變量在相鄰的另一塊區域。
4、文字常量區(const) :常量字符串就是放在這里的。
5、程序代碼區 (code): 存放函數體的二進制代碼。
經典例子:
int a = 0; 全局初始化區
char *p1; 全局未初始化區
main(void)
{
int b;// 棧
char s[] = "abc"; //棧
char *p2; //棧
char *p3 = "123456"; 123456\0";//在常量區,p3在棧上。
static int c =0; //全局(靜態)初始化區
p1 = (char *)malloc(10);
p2 = (char *)malloc(20);
//分配得來得10和20字節的區域就在堆區。
strcpy(p1, "123456"); //123456\0放在常量區,編譯器可能會將它與p3所指向的"123456"優化成一個地方。
}
-
IAR
+關注
關注
5文章
345瀏覽量
36625 -
keil
+關注
關注
68文章
1212瀏覽量
166701 -
編譯
+關注
關注
0文章
654瀏覽量
32813
發布評論請先 登錄
相關推薦
評論