程式中的三國天下

2021-10-01 19:59:13 字數 711 閱讀 3722

(舉例:多個盤子,最底部的盤子)

1.棧在程式中用於維護函式呼叫上下文,沒有棧就沒有函式,沒有區域性變數;

特點:後進先出

棧儲存了乙個函式呼叫所需的維護資訊

1.函式引數,函式返回位址

2.區域性變數

3.函式呼叫上下文

分析函式呼叫過程。。。

為什麼有了棧還需要堆?

​ 棧上的資料在函式返回後就會被釋放掉,無法傳遞到函式外部,如:區域性陣列;

堆是程式中一塊巨大的記憶體空間,可由程式自由使用;

堆中被程式申請使用的內存在程式主動釋放前將一直有效;

系統對堆空間的管理方式:

​ 空閒鍊錶法, 位圖法, 物件池法等等

程式靜態儲存區隨著程式的執行而分配空間,直到程式執行結束;

在程式的編譯期靜態儲存區的大小就已經確定;

程式的靜態儲存區主要用於儲存程式中的全域性變數和靜態變數;

與棧和堆不同,靜態儲存區的資訊最終會儲存到可執行程式中;

棧區主要用於函式呼叫的使用;

堆區主要用於記憶體的動態申請和歸還;

靜態儲存區用於儲存全域性變數和靜態變數;

程式中的三國天下

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

38 程式中的三國天下

1 程式中的棧 注 1 棧 就是一種後進先出的行為 2 在這裡要注意由於在intel系統中棧是向下生長的 棧越擴大其值越小,堆恰好相反 第二個程式裡面 pointer指向的記憶體已經被釋放了,變成了野指標。但是我覺得還有原因在於你想返回區域性變數的位址。如果沒進行函式呼叫,用一下歷史資料也是可以的,...

nefu 三國之戰

三國之戰 time limit 1000 memory limit 65536 description 在三國某某戰爭中,魏軍要圍攻蜀國.諸葛亮親自指揮戰爭,對抗曹操。現假設諸葛亮有n個大炮,每個大炮都有乙個攻擊值ai ai 0 ai 100 而且他有乙個神奇的技能,就是他能指定任意區間的大炮,使他...