二、c語言程式裡全域性變數、區域性變數、堆、棧等概念,在keil中針對stm32系統進行程式設計,除錯變數,進行驗證; 通過串列埠輸出資訊到上位機,進行驗證。
#include
#include
int k1 =1;
int k2;
static
int k3 =2;
static
int k4;
intmain()
棧區-變數位址
i:0x7fffffffdc9c
p:0x7fffffffdca0
str:0x7fffffffdcce
堆區-動態申請位址
0x555555756260
0x555555756280
.bss段
全域性外部無初值 k2:0x555555755020
靜態外部無初值 k4:0x555555755024
靜態內部無初值 m2:0x555555755028
.data段
全域性外部有初值 k1:0x555555755010
靜態外部有初值 k3:0x555555755014
靜態內部有初值 m1:0x555555755018
常量區**區
這裡就可以清楚的看到不同型別的變數的儲存位置的變化。
可以大概總結出,棧向低記憶體位址生長,堆向高記憶體位址生長,全域性靜態變數向低記憶體位址生長,其他的全域性變數都是向高記憶體位址生長。
開啟mcuisp燒錄
stm32的**區和常量區都分配在0x08000000儲存位址(低位址)這一塊,全域性和靜態變數、棧區和堆區的位址都分配在0x20000000儲存位址(高位址)處。
stm32的棧區位址分配是按照高位址到低位址的方式進行分配,而堆區是按照低位址到高位址的方式進行分配,其他的區域基本上都按照從低位址向高位址的方式進行記憶體分配。
從keil軟體的option中可以看出關於stm32記憶體的起始位址和總大小。比如說,rom的起始位址為0x8000000,大小為0x80000;ram的起始位址為0x20000000,大小為0x10000。
linux 堆 棧 全域性變數存放
在學習 深入理解計算機系統 中鏈結這一章中,資料講乙個可執行檔案包含多個段。在linux系統中 段總是從0x08048000處開始,資料段在接下來的4kb對齊的位址處,執行時堆在接下來的讀寫段之後的第乙個4kb對齊的位址處,並通過呼叫malloc庫網上增長,開始於位址0x40000000處的段是為共...
linux 堆 棧 全域性變數存放
在學習 深入理解計算機系統 中鏈結這一章中,資料講乙個可執行檔案包含多個段。在linux系統中 段總是從0x08048000處開始,資料段在接下來的4kb對齊的位址處,執行時堆在接下來的讀寫段之後的第乙個4kb對齊的位址處,並通過呼叫malloc庫網上增長,開始於位址0x40000000處的段是為共...
static全域性變數 全域性變數
1 全域性變數 外部變數 的說明之前再冠以static 就構成了靜態的全域性變數。全域性變數本身就是靜態儲存方式,靜態全域性變數當然也是靜態儲存方式。這兩者在儲存方式上並無不同。這兩者的區別在於非靜態全域性變數的作用域是整個源程式,當乙個源程式由多個原始檔組成時,非靜態的全域性變數在各個原始檔中都是...