stm32記憶體分配

2021-06-21 01:38:37 字數 586 閱讀 3456

原文:

(1)棧區(stack):由編譯器自動分配和釋放,存放函式的引數值、區域性變數的值等,其操作方式類似

於資料結構中的棧。

(2)堆區(heap):一般由程式設計師分配和釋放,若程式設計師不釋放,程式結束時可能由作業系統**。分配

方式類似於資料結構中的鍊錶。

(3)全域性區(靜態區)(static):全域性變數和靜態變數的儲存是放在一塊的,初始化的全域性變數和靜態

變數在一塊區域,未初始化的全域性變數和未初始化的靜態變數在相鄰的另一塊區域。程式結束後由系

統自動釋放。

(4)文字常量區:常量字串就是存放在這裡的。

(5)程式**區:存放函式體的二進位制**。

例如:int a=0;

//全域性初始化區

char *p1;

//全域性未初始化區

main()

所以堆和棧的區別:

stack的空間由作業系統自動分配/釋放,heap上的空間手動分配/釋放。

stack的空間有限,heap是很大的自由儲存區。

程式在編譯期和函式分配記憶體都是在棧上進行,且程式執行中函式呼叫時引數的傳遞也是在棧上進

行。

STM32的記憶體分配

使用keil編寫 區域性變數和全域性變數分別存放在什麼地方?在乙個函式內部定義的變數是內部變數,它只在本函式範圍內有效,也就是說只有在本函式內才能使用它們,在此函式以外是不能使用這些變數的,這稱為區域性變數。使用區域性變數注意以下問題 不同函式中可以使用相同名字的變數,它們代表不同的物件,互不干擾。...

STM32記憶體使用及分配

stack size,一般小工程0x400足夠,我們綜合實驗才設定0x1000就夠用,所以預設無需設定太大。stack size的值根據你程式中區域性變數最大尺寸計算,heap size,如果沒有用到標準庫的malloc,就是廢物,純屬浪費記憶體,所以直接設定為0即可。heap size的值如果程式...

STM32記憶體管理

這是我的第一篇文章,寫的不好請多多見諒 針對stm32f429來進行講解,其他型號的也可以參照學習 相信很多新手在記憶體管理這個程式中比較疑惑,為什麼分配那麼大,可不可以更改大小?但是改大了編譯會錯誤又是為什麼?這裡將對大家心中的疑惑進行講解,並且教大家進行計算。當該項值為 0 的時候,代表對應的記...