![](/img/trans.png)
[英]How long it takes to GCC compiler execute an asm volatile (“nop”/::) instruction?
[英]Is `__asm nop` the Windows equivalent of `asm volatile(“nop”);` from GCC compiler
在Windows中,可以將__asm nop
交換為asm volatile("nop");
(用於GCC編譯器)並產生相同的結果?
我已經讀過volatile()
(在GCC中)確保不會優化調用。 但是,它不能直接移植到Windows,我很好奇它是否可以簡單地刪除或是否需要用類似的結構替換。
__asm
關鍵字的實現在MSVC中非常簡單。 它始終會發出未更改的機器代碼,並且優化程序不會對其進行處理。 對於__asm之后的機器狀態,它也不做任何假設,因為它具有擊敗其他優化的訣竅。
因此,不需要,不需要任何類似於volatile()
東西,它不會消失。 普通__asm { nop }
將始終毫發無損,並且等同於GCC程序集。
請記住,內聯匯編不是一個好的長期策略,在x64編譯器中完全取消了對內聯匯編的支持,而且不太可能再出現。 您將不得不使用內在函數或鏈接到用匯編語言編寫並使用例如ml64.exe進行編譯的代碼。 那確實擊敗了NOP注入,但是優化器已經很好地處理了代碼對齊問題,並且不需要幫助。 這也是您可能根本不應該這樣做的原因。
對於Microsoft編譯器,可以使用__nop()
內在函數來發出nop指令,而不會影響編譯器的優化器。 在所有Windows目標(32位ARM V7、64位ARM V8,IA32,X64)上,這也將是跨平台的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.