close
一、預備知識—程序的內存分配

一個由c/C++編譯的程序占用的內存分為以下幾個部分
1、棧區(stack)—由編譯器自動分配釋放,存放函數的參數值,局部變數的值等。其操作方式類似於數據結構中的棧。

2、堆區(heap)—一般由程序員分配釋放,若程序員不釋放,程序結束時可能由OS回收。注意它與數據結構中的堆是兩回事,分配方式倒是類似於鏈表,呵呵。

3、全局區(靜態區)(static)—全局變數和靜態變數的存儲是放在一塊的,初始化的全局變數和靜態變數在一塊區域,未初始化的全局變數和未初始化的靜態變數在相鄰的另一塊區域。程序結束後由系統釋放。


4、文字常量區—常量字元串就是放在這裡的。程序結束後由系統釋放。


5、程序代碼區據



EX:
//main.cpp
  int a=0;    //全局初始化區
  char *p1;   //全局未初始化區
  main()
  {
   int b;棧
   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"優化成一個地方。
  }
arrow
arrow
    全站熱搜

    天才R 發表在 痞客邦 留言(0) 人氣()