1. 程式人生 > >標準C -- 堆和棧

標準C -- 堆和棧

缺點 保留 不存在 物理 eof 沒有 系統管理 內存泄漏 生命

一、堆內存

  1、就是程序員手動管理的一塊內存,在C語言中,可以理解為用malloc、realloc等申請空間的一些函數,這些函數所申請的空間就是堆空間

  2、C語言中,堆空間是申請和釋放 malloc/free 這兩個函數來實現

  3、堆內存和物理空間的大小有關,如果物理空間夠大的話,理論上,程序員可以申請足夠大的內存

  4、無法和標誌符建立連接,因此堆內存的申請一定需要用到指針來接受函數申請到後返回的內存地址

      例如:int* p = malloc(sizeof(int));此函數就申請了4個字節的內存空間

二、棧內存

  1、棧內存是系統管理的一塊內存,他的內存大小有限,不過一般程序員正常使用時,都是足夠大的

  2、棧內存的申請和釋放都是系統進行管理的 例如:int a=0;

  3、棧內存的存儲數據的特點是先進後出原則

  4、棧內存的使用一般是在局部函數中,因為局部函數作用域一般比較短,因此棧的生命周期一般較短 

三、總結

  棧內存和堆內存的區別主要圍繞:內存的生成和釋放,內存空間的大小

    棧內存的優點:棧內存不存在內存管理者的錯誤,因為他是自動生成和釋放的

    棧內存的缺點:棧內存的空間不大,存儲數據的時間不長

    堆內存的優點:對內存的數據的保留受程序員控制

    堆內存的缺點:對無用的內存如果沒有及時清理,有可能造成內存泄漏

      註:內存申請的速度上,棧內存要快於堆內存

      註:棧內存的生命周期一般較短,因為作用域的緣故

  

標準C -- 堆和棧