作者descent (返無)
看板C_and_CPP
標題[問題] pascal call convention in c
時間Mon Nov 19 09:36:01 2012
請參考 blog 程式碼,
http://descent-incoming.blogspot.tw/2012/11/pascal-call-convention-in-c.html
c call convention, pascal call convention:
這很容易理解, 最主要我想討論三個問題:
* 為什麼 pascal call convention 效率好?
* 為什麼 pascal call convention 由被呼叫者清堆疊? c call convention 為什麼不
能由被呼叫者清堆疊?
* 為什麼 pascal call convention 不能支援不定個數參數?
Q3:
為什麼 pascal call convention 不能支援不定個數參數?
從 a.dis L21 可得到 foo4 的參數 a 是 3, 並不是 1, 是因為編譯器產生的是 mov
0x4(%esp),%eax 所以不能得到第1個參數 a 嗎?編譯器只要產生 mov 0xc(%esp),%eax
不就可以得到 a 了, 為什麼不是這樣呢?
Q1, Q2:
我看不出來 pascal call convention 效率好, 也看不出來為什麼 c call convention
不能由被呼叫者清堆疊?編譯器可以產生 push $1, push $2, 應該可以得知 ret $8, 和
由右到左傳入或是由左到右傳入有什麼差異?
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 59.125.239.46
→ akasan:這篇文章應該還要標明在 x86/x86_64 情況下吧? 11/19 10:23
→ descent:已經補上, 感謝提醒 11/19 10:45
※ 編輯: descent 來自: 59.125.239.46 (11/19 13:35)