38 程式中的三國天下

2021-09-26 00:24:18 字數 1048 閱讀 2780

1、程式中的棧

注:1、棧:就是一種後進先出的行為

2、在這裡要注意由於在intel系統中棧是向下生長的(棧越擴大其值越小,堆恰好相反)

第二個程式裡面 pointer指向的記憶體已經被釋放了,變成了野指標。

但是我覺得還有原因在於你想返回區域性變數的位址。如果沒進行函式呼叫,用一下歷史資料也是可以的,就像第乙個程式,把值賦給了別人,期間沒有發生函式呼叫,於是雖然有野指標,但是資料也是對的。但是第二個程式錯誤在於執行 printf 函式相當於進行了函式呼叫,此時記憶體裡面的資料被銷毀了。

2、程式中的堆(malloc)

3、程式中的靜態儲存區

#include int g_v = 1;			//全域性變數

static int g_vs = 2; //static修飾的全域性變數,不能被外部檔案訪問

結論:從得出的結果我們可以看出,全域性變數,static修飾的全域性變數和static修飾的區域性變數都儲存在同乙個地方,也就是程式的靜態儲存區,記憶體位址都是相鄰的。

4、小結

程式中的三國天下

在c語言中主要運用的涉及到3個區 棧 主要用於函式的呼叫和自動變數的儲存。由於棧的內部機制決定了棧中的內容,當乙個函式呼叫完畢,區域性變數就不再存在。堆 主要用於動態記憶體分配。堆的分配是在記憶體中有很大的一段空閒鍊錶用於存放堆的內容。當使用了動態分配的時候,系統會自動查詢適合的空閒鍊錶,查詢到之後...

程式中的三國天下

舉例 多個盤子,最底部的盤子 1.棧在程式中用於維護函式呼叫上下文,沒有棧就沒有函式,沒有區域性變數 特點 後進先出 棧儲存了乙個函式呼叫所需的維護資訊 1.函式引數,函式返回位址 2.區域性變數 3.函式呼叫上下文 分析函式呼叫過程。為什麼有了棧還需要堆?棧上的資料在函式返回後就會被釋放掉,無法傳...

三國殺的理解

11 人生就像一局三國殺。有可能你還沒判斷出誰是好人誰是壞人你就掛了。12 人生就像一局三國殺。你對別人好,別人不一定對你好。13 人生就像一局三國殺。你要在這個世界生存有時需要偽裝。14 人生就像一局三國殺。你可能來這個世界只是來打醬油的。15 人生就像一局三國殺。有可能一出生就已經決定了你的身份...