STM32中棧、堆、全局區(qū)、常量區(qū)、代碼區(qū)、RAM、ROM的分析
1、堆、棧區(qū):
STM32中堆棧是為了存儲不同信息而開辟的空間,具體對應(yīng)于啟動文件中的head和stack所定義的內(nèi)存空間。
STM32中,堆向高地址增長,棧向低地址增長。
堆:是用戶調(diào)用malloc時申請的內(nèi)存空間。
棧:臨時創(chuàng)建的局部變量(一般的局部變量+const修飾的局部變量),函數(shù)入口參數(shù),函數(shù)返回值存放在棧區(qū)。
2、全局區(qū)(靜態(tài)區(qū))
全局區(qū)有.bss、.data段組成,可讀可寫
①.bss段:未初始化的全局變量、初始化為0的全局變量、初始化為0的靜態(tài)變量存放在.bss段。
②.data段:已經(jīng)初始化的全局變量存放在.data段,靜態(tài)變量存放在.data段,const定義的全局變量存放在.rodata段。
3、常量區(qū)
①字符串存放在常量區(qū)
②常量區(qū)的內(nèi)容不可修改
4、代碼區(qū)
程序執(zhí)行的代碼,存放在代碼區(qū)。
那么這些個區(qū)和實際的內(nèi)存之間什么關(guān)系呢?
我們知道,一般選擇STM32會考慮其RAM、ROM(即FLASH),RAM的特點是掉電丟失數(shù)據(jù),僅在上電運行時存儲數(shù)據(jù)。ROM的特點是掉電不丟失數(shù)據(jù),一般用來存儲代碼和常量區(qū)數(shù)據(jù)。
至此我們可知:堆、棧、全局區(qū)(.bss段、.data段)都是存放在RAM中,而代碼區(qū)和常量區(qū)的內(nèi)容編譯后存放在RAM中。
即:
RAM :堆 + 棧 + 全局區(qū)(.bss段、.data段))
ROM:代碼區(qū)+常量區(qū)文章來源:http://www.zghlxwxcb.cn/news/detail-653650.html
我們在KEIL編譯框下面,可以看到,Code、RO-data、RW-data、ZI-data四個部分,分別代表:代碼占用空間、只讀常量占用空間、已初始化的可讀可寫的變量占用空間、未初始化的可讀可寫變量。
此時:
RAM = RW-data + ZI-data
ROM = Code + RO-data + RW-data文章來源地址http://www.zghlxwxcb.cn/news/detail-653650.html
到了這里,關(guān)于STM32中棧、堆、全局區(qū)、常量區(qū)、代碼區(qū)、RAM、ROM的分析的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!