2013-04-16 27 views
2

使用來自C程序的兩個整數或指針參數調用非函數inline函數時,函數將傳遞到寄存器rdirsi。編譯是否可以這樣完成:整數/指針參數inline函數也在寄存器中傳遞(並且而不是在堆棧上)?傳遞給Linux C內聯函數的參數

回答

3

反問題:你爲什麼在意?我認爲你不應該。這是你的編譯器工作。如果你不相信你的編譯器在那裏做正確的事情,你可能根本不應該使用它。

而且我非常肯定你的假設,即參數永遠保證寄存在寄存器中也是錯誤的。

6

當一個函數被內聯時,它被視爲它的代碼被寫入到調用它的函數中。發生這種情況時,它根本不傳遞參數。

當函數沒有內聯時,它與普通函數完全沒有區別。 inline只是提示編譯器嘗試內聯函數;它根本不影響鏈接。

+0

更正,內聯函數*可能*內聯,通常由編譯器自行決定。 –

+1

澄清的答案。 – duskwuff

0

在C中,前兩個int不會被傳入%rdi和%rsi ...這是ABI /調用約定問題...不是語言問題。

如果函數得到內聯和周圍其餘代碼允許,整型的將可能是在通用寄存器...

但是這絕對不是你的關心...如果你保護,您可以讓編譯器生成asm來讀取和學習...