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

看板C_and_CPP作者時間15年前 (2009/02/10 11:18), 編輯推噓1(104)
留言5則, 1人參與, 最新討論串2/3 (看更多)
我來答看看, 請高手修正 ※ 引述《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

02/10 11:20, , 1F
return 一般是放在 eax register (intel) ..但是用
02/10 11:20, 1F

02/10 11:21, , 2F
指標的話是放在記憶體...stack release 是直接減去
02/10 11:21, 2F

02/10 11:21, , 3F
stack frame pointer
02/10 11:21, 3F

02/10 11:22, , 4F
stack就真的是stack...call function時會往上堆
02/10 11:22, 4F

02/10 11:22, , 5F
function return 時就減去 frame size
02/10 11:22, 5F
文章代碼(AID): #19aF7x30 (C_and_CPP)
文章代碼(AID): #19aF7x30 (C_and_CPP)