memory barrier 長這樣 __asm__ __volatile__("": : :"memory")
首先gcc對於匯編語言(組合語言),是使用AT&T的語法,不同於INTEL的組合語言語法
格式 : __asm__(組合語言:輸出:輸入:修飾詞")
__volatile__ 代表這行指令(這些組合語言),不和前面的指令一起最佳化
"memory" 告訴GCC這些組合語言會改變所有的RAM的資料
因為沒組合語言,又告訴gcc所有RAM的內容都改變,
所以這個memory barrier的效用,
會讓這行之前被gcc所cache到暫存器的資料通通寫回RAM裡面
也告訴gcc會讓之後讀取RAM的資料,必須再從RAM裡讀取出來,
參考資料:
http://blog.chinaunix.net/u1/55599/showart_1099203.html
http://hi.baidu.com/hilyjiang/blog/item/2254e62afd6db42cd42af180.html
http://lyowu.yourblog.org/logs/135030.html
http://blog.openrays.org/blog.php?do=showone&tid=329
http://fanqiang.chinaunix.net/a4/b8/20010704/130401784_b.html
沒有留言:
張貼留言