1. 程式人生 > >stm32記憶體分配

stm32記憶體分配

原文: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是很大的自由儲存區。

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

行。