Re: [問題] 中央堆疊記憶體配置與釋放

看板C_and_CPP (C/C++)作者時間12年前 (2014/04/17 14:24), 12年前編輯推噓4(408)
留言12則, 6人參與, 最新討論串2/2 (看更多)
這問題要從兩個角度分析 1.C/C++語言層次 行為未定義,結果不確定,就這樣 2.assembly語言層次,以下舉X86架構 每個函數皆有自己的stack frame,從高到低為 parameter----->return address------>local variable 因為這情況下compiler通常會把g跟f的記憶體位址配置成一樣 若compiler實作時,沒有特別去處理範圍以外的stack的內容,就會出現下列情形 f執行完畢---->main x指向f y,*x=20---->呼叫g時先複製值給g的參數y,g y=20 ---->main x指向g x,*x=10---->main y=10 版本一的解答真的會害死人....... 這邊我可以再舉一個類似的例子 int a(){ return 123; } int b(){ a(); } int main(){ printf("%d\n",b()); } 請問main的輸出為? -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 220.130.247.105 ※ 文章網址: http://www.ptt.cc/bbs/C_and_CPP/M.1397715851.A.65D.html ※ 編輯: loveflames (220.130.247.105), 04/17/2014 14:27:31

04/17 17:54, , 1F
感謝 你舉的例子跟我在國考版舉的例子很像.. dev c++會
04/17 17:54, 1F

04/17 17:54, , 2F
出123 應是同樣道理 感謝
04/17 17:54, 2F

04/17 21:54, , 3F
微妙的是最後這例子答案會出 123 的理由其實不是記憶體共用
04/17 21:54, 3F

04/17 21:54, , 4F
而是暫存器(因為沒被動到而)共用
04/17 21:54, 4F

04/17 21:55, , 5F
這牽涉到暫存器配置及 calling convention
04/17 21:55, 5F

04/17 22:50, , 6F
好深澳...聽都沒聽過
04/17 22:50, 6F

04/18 00:05, , 7F
考這種題目的真的知道自己在考什麼嗎
04/18 00:05, 7F

04/18 11:45, , 8F
這種考題也許是曾經debug過所以決定要拿來警世 XD
04/18 11:45, 8F

04/18 14:53, , 9F
就怕出題的人不知道自己在考什麼,拿特定compiler的結
04/18 14:53, 9F

04/18 14:53, , 10F
果當解答
04/18 14:53, 10F

04/18 14:58, , 11F
cdecl 在回傳數字型態時會用 EAX 暫存器..
04/18 14:58, 11F

04/18 15:00, , 12F
針對整數或者記憶體位址是這樣,浮點數就是另一回事了
04/18 15:00, 12F
文章代碼(AID): #1JJtEBPT (C_and_CPP)
文章代碼(AID): #1JJtEBPT (C_and_CPP)