如果我要揭露一臺機器特定指令給程序員,有兩種方法我可以這樣做:gcc內在vs內聯彙編:哪個更好?
- 定義一個新的內建/固有
- 公開相同的內聯彙編ASM()作爲它的一個運算類型的指令,我認爲沒有必要對ASM揮發性()
我已閱讀,內建讓編譯器照顧類型檢查,寄存器分配和「其他優化」等。但是編譯器甚至需要在asm()的情況下做到這一點,對吧?那麼使用asm()作爲一個指令的性能好處究竟是什麼?
如果涉及多個機器指令,等式如何變化?
支持內在性的「可移植性」理論是可以理解的,但我很好奇理解其中一個的性能優勢(如果有的話)。
對於單個指令,我懷疑會有明顯的差異。 – Gene 2014-09-04 23:42:51
Builtins。 GCC將您的內聯彙編逐字粘貼到代碼流中,並且關於它在內聯彙編上做的唯一分析是您設置寄存器限制的可行性。這意味着沒有機會將指令轉換成其他的東西,如果它在給定的情況下更加優化的話,或者如果它可以證明指令是無用的,則刪除它。 – 2014-09-04 23:57:52
內聯彙編適用於當您比編譯器更好的瞭解時,並希望它不受阻礙,因此您可以按照自己想要的順序準確執行所需的指令,完全按照所需的寄存器執行。這通常是一個壞主意。 – Sneftel 2014-09-04 23:59:13