看板 C_and_CPP 關於我們 聯絡資訊
請參考 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)