UBOOT-內存地址分析圖
回顧內存四區的知識:在執行一個C語言程序時,此程序將擁有唯一的“內存四區”--堆區,棧區,全局區,代碼區。
其中,棧區:由編譯器自動分配,存放函數的形參,局部變量等,函數執行完畢時自動釋放。
堆區:程序員手動分配釋放(常見malloc,free等函數涉及)。
全局區:存放全局變量和(static)靜態變量,裏面細分有一個常量區,字符串常量和其他常量也存放在此。該區域在程序結束後由操作系統釋放,
補充:全局變量和靜態變量的存儲是放在一塊的,初始化的全局變量和靜態變量在一塊區域, 未初始化的全局變量和未初始化的靜態變量在相鄰的另一塊區域。
代碼區:存放程序執行代碼的一塊內存區域、裏面是二進制的代碼、內存區域通常屬於只讀, 某些架構也允許代碼段爲可寫,其實就是存放代碼框架、或者說函數體、代碼體的地方。
uboot的上述內存圖如何對應C的內存四區呢?全局區如何構成?
代碼區=start.o+*(.text)
全局區 = *(.rodata*)+*(.data)+*(.u_boot_cmd)+*(.rel*)+*(.dynsym)+*(.mmutable)+*(.bss)
或者
全局區 = *(.rodata*)+*(.data)+空+*(.bss)
重定位以後的uboot內存分佈圖: