__asm__ __volatile__(: : :memory)
生活随笔
收集整理的這篇文章主要介紹了
__asm__ __volatile__(: : :memory)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
memory 強制gcc編譯器假設RAM所有內存單元均被匯編指令修改,這樣cpu中的registers和cache中已緩存的內存單元中的數據將作廢。cpu將不得不在需要的時候重新讀取內存中的數據。這就阻止了cpu又將registers,cache中的數據用于去優化指令,而避免去訪問內存。
3)??memory強制gcc編譯器假設RAM所有內存單元均被匯編指令修改,這樣cpu中的registers和cache中已緩存的內存單元中的數據將作廢。cpu將不得不在需要的時候重新讀取內存中的數據。這就阻止了cpu又將registers,cache中的數據用于去優化指令,而避免去訪問內存。
4)???"":::表示這是個空指令。barrier()不用在此插入一條串行化匯編指令。
??? The GCC manual says using 'asm volatile' prevents the asm instruction from being 'movedsignificantly' and adding 'memory' to the clobber list prevents GCC from keeping memory values cached in registers across the assembler instruction, but also says 'GCC will perform some optimizations across a volatile asm instruction' but doesn't explain what.
???
1)?? __asm__用于指示編譯器在此插入匯編語句。
2)??__volatile__用于告訴編譯器,嚴禁將此處的匯編語句與其它的語句重組合優化。即:原原本本按原來的樣子處理這這里的匯編。3)??memory強制gcc編譯器假設RAM所有內存單元均被匯編指令修改,這樣cpu中的registers和cache中已緩存的內存單元中的數據將作廢。cpu將不得不在需要的時候重新讀取內存中的數據。這就阻止了cpu又將registers,cache中的數據用于去優化指令,而避免去訪問內存。
4)???"":::表示這是個空指令。barrier()不用在此插入一條串行化匯編指令。
總結
以上是生活随笔為你收集整理的__asm__ __volatile__(: : :memory)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: WinCE系统声音定制
- 下一篇: 在SD/MMC卡上实现hive (Imp