天天看點

C語言知識點(二):程式的記憶體配置設定

一個由C/C++編譯的程式占用的記憶體分為以下幾個部分:

(1)棧區(stack):由編譯器自動配置設定釋放,速度較快,存放函數的參數值、局部變量的值等。其操作方式類似于資料結構中的棧。

(2)堆區(heap):一般由程式員配置設定釋放,速度較慢,由new配置設定的記憶體,若程式員不釋放,程式結束時可能由OS回收。

(3)全局區(靜态區)(static):全局變量和靜态變量的存儲是放在一起的,初始化的全局變量和靜态變量在同一區域,未初始化的全局變量和未初始化的靜态變量在相鄰的一塊區域。程式結束後由系統釋放。

(4)文字常量區:常量字元串是放在這裡的,程式結束後由系統釋放。

(5)程式代碼區:存放函數的二進制代碼

例子程式         一個前輩寫的,非常詳細

//main.cpp

int a=0;    //全局初始化區

  char *p1;   //全局未初始化區

  main()

  {

   intb;棧

   char s[]="abc";   //棧

   char *p2;         //棧

   char *p3="123456";   //123456\0在常量區,p3在棧上。

   static int c=0;   //全局(靜态)初始化區

   p1 = (char*)malloc(10);

   p2 = (char*)malloc(20);   //配置設定得來得10和20位元組的區域就在堆區。

   strcpy(p1,"123456");   //123456\0放在常量區,編譯器可能會将它與p3所向"123456"優化成一個地方。

}

繼續閱讀