1)對(duì)于燒錄在單片機(jī)里面的程序,程序的代碼段,data段,bss段,rodata段等都存放在單片機(jī)的Flash中。當(dāng)單片機(jī)上電后,初始化匯編代碼將data段,bss段,復(fù)制到單片機(jī)的RAM中,并建立好堆棧,開(kāi)始調(diào)用程序的main函數(shù)。以后,便有了程序存儲(chǔ)器和數(shù)據(jù)存儲(chǔ)器之分,程序運(yùn)行時(shí)從Flash(即指令存儲(chǔ)器,代碼存儲(chǔ)器)中讀取指令,從RAM中讀取與寫(xiě)入數(shù)據(jù)。
2)RAM->存放data段,bss段,堆棧段;
ROM->存放代碼段(code 段)與只讀數(shù)據(jù)段(rodata段);
3)bss段的理解:(Block Started By Symbol)通常是指用來(lái)存放程序未初始化的全局變量和靜態(tài)變量的一塊內(nèi)存區(qū)域,特點(diǎn)是可讀寫(xiě)的;在程序執(zhí)行之前bss段會(huì)自動(dòng)清零,所以未初始化的全局變量與靜態(tài)變量在程序執(zhí)行之前就已經(jīng)初始化為0了。
注:bss段與data段的區(qū)別:bss段存放的是未初始化的全局變量與靜態(tài)變量;data段存放的是初始化后的全局變量與靜態(tài)變量;
4)rodata段的理解:rodata段存放的是程序只讀數(shù)據(jù),一般是程序里面的只讀變量(如const修飾的變量)與字符串常量。單獨(dú)設(shè)立".rodata"段有很多好處,不光是在語(yǔ)義上支持const字,操作系統(tǒng)加載時(shí)可以將".rodata"段的屬性設(shè)置為只讀,保證了程序的安全。