程式中的三國

yujingbo1023發表於2014-12-12
程式中的棧
1,棧是現代計算機程式裡最為重要的概念之一
2,   棧在程式中用於維護函式呼叫上下文,沒有棧就沒有函式,沒有區域性變數
3,棧儲存了一個函式呼叫所需要的維護資訊
         函式引數,函式返回地址
         區域性變數
         函式呼叫上下文

程式中的堆
1, 為什麼有了棧還需要堆?
      棧上的資料在函式返回後就會被釋放掉,無法傳遞到函式外部,如區域性陣列
2,堆是程式中一塊巨大的記憶體空間,可由程式自由使用
3,堆中被程式申請使用的記憶體在程式主動釋放前將一直有效
4,堆空間通過申請才能獲得
5,系統對堆空間的管理方式
       空閒連結串列法,點陣圖法,物件池法等等
          

         
           這說清了幾個問題:
                  a,如果申請不成功時,為什麼會返回NULL.
                  b,free(p);的作用是重新將p這個結點插入到這個連結串列中
                  c,sizeof(int)4個位元組,但此時會去找靠近4,或比4大那麼一點的一個結點,把它摘下來賦給p
                  d, 雖然我們每次申請的都有可能多那麼一點點的空間,但我們不能打這點空間的主意

程式中的靜態儲存區
1,程式表態儲存區隨著程式的執行而分配空間,直到程式執行結束
2,在程式的編譯期靜態儲存區的大小就已經確定
3,程式的靜態儲存區主要用於儲存程式中的全域性變數和靜態變數
4,與棧和堆不同,靜態儲存區的資訊最終會儲存到可執行程式中

小結
1,棧,堆和靜態儲存區是C語言程式常涉及的三個基本記憶體區
2,棧區主要用於函式呼叫的使用
3,堆區主要是用於記憶體的動態申請和歸還
4,表態儲存區用於儲存全域性變數和靜態變數

相關文章