-5
A
回答
6
沒有指定C++標準應該做什麼。但我會說任何體面的編譯器都會優化這些代碼,甚至不會留下nop
指令。
2
現代編譯器爲了某種目的發出類似nop
的指令 - 通常用於對齊(在許多架構中,如果目標與16字節對齊,分支會更快地執行)或等待某些操作完成(IARC上的IIRC你必須在使用某些操作碼的結果之前等待一定數量的週期,所以要麼你有其他的事情要做,要麼你必須發射nop
s)。
現在,無論我們是在這種情況下還是最有可能沒有nop
將被髮射。對於這樣的函數,您可以期待定期的堆棧框架設置,隨後清理未優化的版本,或者在優化過的版本中使用普通的ret
(加上堆棧清理代碼,如果調用約定規定的話)。更好的是,如果編譯器足夠智能並且在編譯呼叫站點時已知函數的定義(所以,這是一個static
函數,啓用了一個inline
或啓用鏈接時間碼生成),則該呼叫可能是完全省略,並且可能在最終的可執行文件中沒有保留功能代碼的蹤跡。
相關問題
- 1. anglarjs指令鏈接函數不從編譯函數調用
- 2. 將NKDbgPrintfW編譯爲發佈版本中的nop嗎?
- 3. PHP即時返回函數
- 4. 爲什麼C#using指令在不影響編譯過程時調用「指令」?
- 5. 函數編譯隔離指令 - AngularJS
- 6. 從函數外部調用函數時不返回值嗎?
- 7. Android編譯時間指令
- 8. 從其他指令的編譯函數插入指令
- 9. 調用$編譯自定義指令
- 10. 即使服務器端函數成功返回回調函數
- 11. Python編碼(調用函數/返回值)
- 12. 在調用另一個函數後立即返回函數
- 13. AngularJS指令作用域和$編譯 - 變量返回空白
- 14. 函數返回constexpr不會編譯
- 15. 編譯時間動態函數調用
- 16. C代碼中的編譯時錯誤[從函數返回數組指針]
- 17. 爲函數調用編譯錯誤,Arduino
- 18. 角度指令回調函數
- 19. 將指令中的值傳遞給編譯函數
- 20. 使用回調函數返回函數
- 21. 爲什麼不能在指令的鏈接函數中編譯?
- 22. 函數指針 - 編譯時間錯誤
- 23. Python編譯器函數在編譯時調用
- 24. 當從rebol調用時,從dll函數返回的指針
- 25. 模板函數編譯時返回類型無參數
- 26. 返回布展僅式編譯即使拷貝構造函數是不可用
- 27. jQuery,函數回調即時,不等待
- 28. 編譯時缺少指令或彙編
- 29. 從函數調用返回後指針爲空
- 30. 將返回一個對象調用它的析構函數嗎?
這對你來說是一件相當容易的事情,不是嗎? –
不幸的是,我不知道該怎麼做... – Funkyguy
爲什麼應該有一個'nop',哪裏可以沒有? – YSC