Re: [問題] 一個研究所考題
※ 引述《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
02/10 12:00, 1F
→
02/10 14:38, , 2F
02/10 14:38, 2F
→
02/10 16:01, , 3F
02/10 16:01, 3F
推
02/10 16:21, , 4F
02/10 16:21, 4F
→
02/10 17:05, , 5F
02/10 17:05, 5F
→
02/10 17:05, , 6F
02/10 17:05, 6F
討論串 (同標題文章)
C_and_CPP 近期熱門文章
PTT數位生活區 即時熱門文章