原文:
(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 的時候,代表對應的記...