作者in09 ()
看板C_and_CPP
標題Re: [問題] 一個研究所考題
時間Tue Feb 10 11:18:16 2009
我來答看看, 請高手修正
※ 引述《peacecorner (說謊的沒海鷗)》之銘言:
: 1.一個程式在執行時,其data area 可分作兩部份:heap 與call stack,
: 請問call stack 與heap 各是做什麼用的
Heap 是給 global, static 變數放的地方, malloc (new) 出來的變數也是放這裏
call stack 是 local 變數放的地方, function 相關的 data (如參數) 也是
: 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: 123.204.71.48
推 pponywong:return 一般是放在 eax register (intel) ..但是用 02/10 11:20
→ pponywong:指標的話是放在記憶體...stack release 是直接減去 02/10 11:21
→ pponywong:stack frame pointer 02/10 11:21
→ pponywong:stack就真的是stack...call function時會往上堆 02/10 11:22
→ pponywong:function return 時就減去 frame size 02/10 11:22