執行時記憶體的劃分
各區段功能說明:1、程式**區:存放函式體的二進位制**。
2、全域性區(靜態區)(static):全域性變數和靜態變數的儲存是放在一塊的,初始化的全域性變數和靜態變數在一塊區域, 未初始化的全域性變數和未初始化的靜態變數在相鄰的另一塊區域。 - 程式結束後由系統釋放。
3、文字常量區:常量字串就是放在這裡的。 程式結束後由系統釋放。
4、堆區(heap): 一般由程式設計師分配釋放, 若程式設計師不釋放,程式結束時可能由os** 。注意它與資料結構中的堆是兩回事,分配方式類似於鍊錶。
5、棧區(stack):由編譯器自動分配釋放,存放函式的引數值,區域性變數的值等。其操作方式類似於資料結構中的棧。
全域性變數是在堆中,初始化為0靜態儲存分配和動態儲存分配:
對於那些在編譯時刻就可以確定大小的資料物件,可以在編譯時刻就為它們分配儲存空間,這樣的分配策略稱為靜態儲存分配。
反之,如果不能在編譯時完全確定資料物件的大小,就要採用動態儲存分配的策略。即在編譯時僅產生各種必要的資訊,而在執行時刻,再動態地分配資料物件的儲存空間C 編譯 執行原理
關於編譯與記憶體的關係,以及執行時記憶體的劃分 1 所謂在編譯期間分配空間指的是靜態分配空間 相對於用new動態申請空間 如全域性變數或靜態變數 包括一些複雜型別的 常量 它們所需要的空間大小可以明確計算出來,並且不會再改變,因此它們可以直接存放在可執行檔案的特定的節裡 而且 包含初始化的值 程式執...
編譯原理之解釋執行
原始碼 生成目標 後就可進行解釋執行了。整體思路 1.具體實現 掃瞄目標 表,根據每條 在的作用進行相應的實現。在這個實驗中,我用了乙個int陣列來記錄活動,用了乙個棧來進行計算。有著指向 的指標sp,當sp的值指向最後一條 時則結束。每條 的具體實現 1.1 jmp 直接將 指標更改為a域裡的值,...
編譯鏈結執行原理
預編譯.i 刪除 define 文字替換 處理 include 遞迴展開 處理 if end if等預編譯指令 刪除注釋 新增行號和檔案標識 保留 pragma 編譯.s 1.詞法分析 2.語法分析 3.語義分析 4.優化 5.生成彙編指令 低階語言 以下是彙編指令的 int main 彙編.o 翻...