程式和資料都儲存在儲存器中。
儲存器又分為易失儲存器(記憶體)和非易失儲存器(硬碟)。
對於c/c++程式設計人員而言,記憶體是最重要的操作物件。
計算機的記憶體被編組為「位址-值」這樣的關係對。
現代計算機把記憶體分為三種型別:棧記憶體、堆記憶體、程式記憶體。
本文重點關注棧記憶體。
學過資料結構都知道,棧記憶體嚴格按照「先入後出」的原則。通常使用棧的頂部進行操作,資料在棧頂「入棧」,之後還是在棧頂「出棧」。
棧記憶體用來幹嘛呢?棧記憶體也叫呼叫棧,每乙個c程式都由它來控制其函式執行的流程。具體點說,就是棧記憶體分為很多棧幀,每個棧幀裡面儲存乙個函式的資訊,按照程式中函式的呼叫順序依次入棧,再依次出棧來實現函式的呼叫次序。
棧幀儲存了每乙個函式的返回位置、實參、區域性變數、返回值位址。
呼叫棧規則:
1.如果函式返回了乙個值,這個值(包括位址和值)會被寫到該函式對應棧幀的乙個區域性變數中。
2.如果函式有區域性變數,區域性變數被儲存在棧幀。
3.如果函式有實參,實參也被儲存在棧幀。
4.函式的返回位置也要儲存在棧幀。一般返回位置就是函式呼叫之後的行編號。
5.如果相同函式在不同行被呼叫,則每個呼叫都有乙個相應的返回位置。
6.乙個函式執行結束後,程式將從棧頂部棧幀中的返回位置(行編號)處繼續執行。棧頂棧幀隨即被彈出。
推薦使用ddd(命令列除錯程式)來檢測呼叫棧。
C語言學習 棧
棧的定義 僅允許在表尾插入或者刪除的線性表 棧的特點 先進後出或者後進先出 棧是線性表所以其儲存結構也可分為順序儲存結構和鏈式儲存結構 需要先知道棧的大小,定義後無法再改變棧的大小 與鍊錶類似 1.結構體定義時,不分配空間,例如上述的data max size 陣列和變數top是不分配具體的記憶體,...
C語言學習1
今天可能是開始學習重點了,講了許多的東西,並且老師也對c語言這門學科的各個方面進行了闡述,我發現就算是把這門學科的知識都學完了也才是基礎,這門學科的博大,今天的知識有點多,因為以前也學過js,而今天又主要講了運算子和表示式,所以對於今天的知識還是比較容易了,還講了型別之間的轉換,這也是比較重要的 像...
C語言學習 1
c語言中的6種語句 標號語句,復合語句,表示式語句,選擇語句,迭代語句,跳轉語句。乙個簡單的c程式 include int main void include 則行 是一條c預處理指令。通常,c編譯器在編譯前會對源 做一些準備工作,即預處理。所有的c編譯器軟體包都提供stdio.h檔案。該檔案中包含...