[問題] share memory 與 volatile

看板C_and_CPP作者 (月餅狗)時間13年前 (2011/03/31 05:07), 編輯推噓1(108)
留言9則, 2人參與, 最新討論串1/1
想請問一下 在C裡面volatile是說,compiler有可能會將變數暫存在register當中 所以使用volatile是讓他強制寫入與讀取,不會有暫存的最佳化行為 那麼在share memory當中是不是所有share的變數都要設成volatile? 還是有什麼方式可以判斷是否該加volatile? 我的狀況是在process A有一個二維陣列的值需要由process B計算之後填入的 如此我share memory中的二位陣列 int arr[m][n] 是否應該宣告成 volatile int arr[m][n]? 主要還是想問關於如何判斷是否該加volatile 我心裡認為share memory中的structure內變數都應該要加 但是又覺得怪怪的 還是我應該一開始宣告就把整個struct宣告成volatile 而不是struct內部變數宣告成volatile? 謝謝! -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.113.208.64 ※ 編輯: clop 來自: 140.113.208.64 (03/31 05:10)

03/31 11:07, , 1F
這問題不能用 volatile 來解
03/31 11:07, 1F

03/31 11:07, , 2F
因為 register 到 memory 中間還有很多層 cache
03/31 11:07, 2F

03/31 11:07, , 3F
volatile 不能阻止 cpu 從 cache 中取值
03/31 11:07, 3F

03/31 11:10, , 4F
cache consistency 的事情是硬體的事了吧?
03/31 11:10, 4F

03/31 11:11, , 5F
volatile 主要阻止 *a = 10; b =*a; 代換成 b = 10 之類的
03/31 11:11, 5F

03/31 11:13, , 6F
最佳化,該存的不會 *a = 10 還是在^
03/31 11:13, 6F

03/31 11:13, , 7F
少 除非 PTA的結果告訴 Compiler 這塊記憶體
03/31 11:13, 7F

03/31 11:14, , 8F
沒其他人用
03/31 11:14, 8F

03/31 11:14, , 9F
推文排版大崩壞 <囧>
03/31 11:14, 9F
文章代碼(AID): #1Davk0cj (C_and_CPP)