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