1. 程式人生 > >關於陣列定義在函式外面可實現正常功能,定義在裡面不行的原因

關於陣列定義在函式外面可實現正常功能,定義在裡面不行的原因

eg:

  u8 buffer[4096];      //如果將buffer定義為全域性變數功能可正常實現

  int main()

  {

    //u8 buffer[4096];  //如果將buffer定義為區域性變數無法實現正常功能

    u8 *pbuffer;

    pbuffer=buffer;

    .............

  }

  函式內的變數是區域性變數,佔用棧空間
  函式外的變數是全域性變數,佔用堆空間

   
     棧空間可以簡單地理解為記憶體中一小塊專用的地方,效率略高,大小有限
  堆空間可以簡單地理解為近似整個記憶體,效率略低,大小近似記憶體大小

  上面例子中定義的區域性陣列太大,一般棧記憶體很小,因此很可能是棧溢位了
  這個異常不能被捕獲,按MSDN的說法“您無法捕獲堆疊異常,因為異常處理程式碼可能需要堆疊空間”