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