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