- 論壇徽章:
- 0
|
以下是本人的理解,請大牛分析下對否?
優(yōu)化屏障是針對編譯器來說的,內(nèi)核中以barrier()宏給出,它避免編譯器的重排序優(yōu)化操作,保證編譯程序時在優(yōu)化屏障之前的指令不會在優(yōu)化屏障之后執(zhí)行。
什么意思呢?比如現(xiàn)在有四條匯編指令A,B,C,D,預期的執(zhí)行順序是A-B-C-D,在沒有使用barrier()優(yōu)化屏蔽時,我們?nèi)绻_啟了編譯優(yōu)化,那么很可能被優(yōu)化成這樣的順序:
C-D-A-B,那么此時我們在原來B,C之間加入barrier,那么C,D就不會跑到A,B之前了,但是barrier并沒有保證CPU把指令混在一起執(zhí)行,這里的意思是,雖然我們使用了barrier()是編譯產(chǎn)生的匯編指令不會亂序,但是并不是cpu在取指令執(zhí)行時也是按照匯編指令的出現(xiàn)順序來做。比如我們保證了匯編指令順序中C,D不會跟A,B顛倒,但是不能保證會先執(zhí)行A,B后指令C,D。。。
所以這就需要內(nèi)存屏蔽,這里以mb表示。它保證了在mb之后的指令開始執(zhí)行之前,mb之前的指令已經(jīng)執(zhí)行完成 |
|