Re: [問題] 一個研究所考題

看板C_and_CPP作者 (pony)時間15年前 (2009/02/10 11:33), 編輯推噓1(105)
留言6則, 3人參與, 最新討論串3/3 (看更多)
※ 引述《in09 ()》之銘言: : 我來答看看, 請高手修正 : ※ 引述《peacecorner (說謊的沒海鷗)》之銘言: : : 1.一個程式在執行時,其data area 可分作兩部份:heap 與call stack, : : 請問call stack 與heap 各是做什麼用的 : Heap 是給 global, static 變數放的地方, malloc (new) 出來的變數也是放這裏 : call stack 是 local 變數放的地方, function 相關的 data (如參數) 也是 heap 是放 malloc 跟 new 的資料 global 跟 static 變數是放到 data section 好像不太一樣 一般local 變數跟函式呼叫是放到stack 例如原本 stack 是指到 p 當你宣告 int i; 時 stack 指到了 p + sizeof(int) = p + 4 char a[20]; stack = p + sizeof(a) = p + 20 還有一般呼叫函式會用 stack 放參數跟return point 像 C() { A(); } stack 會有 p = return address of a() (void* = far proc pointer) p + sizeof(void*) = new stack in A() 如果是 C() { int x = 0; int i = A(x); } 的話 p = return address of A() p + sizeof(void*) = variable x p + sizeof(void*) + sizeof(int) = new stack in A(x) 如果 A(x) 結束的話 會把回傳值放到 eax 然後減去呼叫 A(x) 所用到的 frame size stack in A() - sizeof(int) - sizeof(void*) = original p 大概是這樣 詳細的做法請看 組合語言那本書, 就是封面是貝殼的 : : 2.接續上題,請解釋function 的呼叫(與function call 的return) : : 與call stack 的“消長”(i.e., shrink and grow)有何關聯? : call 一個 function 就會需要一塊 stack 放置相關的 data. : return 時, release 這塊. : (不過, 我一直對 "return 的值" 是放在哪裏, 幾時會 release 一直不清楚, 有請高手) : : 小弟已經在網路查過了 但是沒有查到 : : 我知道heap 與call stack分別是堆積與呼叫堆疊 : : 也知道函式在呼叫的時候會將指令位址存入堆疊 : : 等到return時再從堆疊取出 : : 但是跟data area扯上關係我就不會解釋了 : : 第一題不會 第二題就不知道怎麼解釋了 : : 有沒有高手可以給小弟一個完整的答案呢?? : : PS:這兩題不是作業,拜託高手回答一下 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.114.207.94 ※ 編輯: pponywong 來自: 140.114.207.94 (02/10 11:35)

02/10 12:00, , 1F
BECK的貝殼書不是教系統程式嗎?
02/10 12:00, 1F

02/10 14:38, , 2F
黃色貝殼是ASM 紫色貝殼是系統程式
02/10 14:38, 2F

02/10 16:01, , 3F
我只看過舊版的SP 那時候好像是黑貝殼說
02/10 16:01, 3F

02/10 16:21, , 4F
看起來比較像 海螺 XD
02/10 16:21, 4F

02/10 17:05, , 5F
好像是鸚鵡螺(nautilus)吧 可是大家俗稱貝殼
02/10 17:05, 5F

02/10 17:05, , 6F
BECK唸起來也像貝殼
02/10 17:05, 6F
文章代碼(AID): #19aFMXY8 (C_and_CPP)
文章代碼(AID): #19aFMXY8 (C_and_CPP)