stm32記憶體分配
阿新 • • 發佈:2019-01-24
原文:http://blog.sina.com.cn/s/blog_72605ba50101esk7.html
(1)棧區(stack):由編譯器自動分配和釋放,存放函式的引數值、區域性變數的值等,其操作方式類似
於資料結構中的棧。
(2)堆區(heap):一般由程式設計師分配和釋放,若程式設計師不釋放,程式結束時可能由作業系統回收。分配
方式類似於資料結構中的連結串列。
(3)全域性區(靜態區)(static):全域性變數和靜態變數的儲存是放在一塊的,初始化的全域性變數和靜態
變數在一塊區域,未初始化的全域性變數和未初始化的靜態變數在相鄰的另一塊區域。程式結束後由系
統自動釋放。
(4)文字常量區:常量字串就是存放在這裡的。
(5)程式程式碼區:存放函式體的二進位制程式碼。
例如:
int a=0;//全域性初始化區
char *p1;//全域性未初始化區
main()
{
intb;//棧
chars[]="abc";//棧
char*p3= "1234567";//在文字常量區
staticint c =0 ;//靜態初始化區
p1=(char *)malloc(10);//堆區
strcpy(p1,"123456");//"123456"放在常量區
}
所以堆和棧的區別:
stack的空間由作業系統自動分配/釋放,heap上的空間手動分配/釋放。
stack的空間有限,heap是很大的自由儲存區。
程式在編譯期和函式分配記憶體都是在棧上進行,且程式執行中函式呼叫時引數的傳遞也是在棧上進
行。