2012-05-24 49 views
0

我見過很多並行編程代碼,如尋找最大數組,矩陣乘法等使用指針。我不明白爲什麼它被使用。例如:(shseg+(offset*sizeof(float))) = sum;爲什麼用於訪問共享內存的指針?

的矩陣乘法代碼:

shseg = shmat(handle,NULL,0); 
for(row=SIZE/2;row<SIZE;row++){ 

    for(column=0;column<SIZE;column++){ 
    sum = 0; 

    for(tindex=0;tindex<SIZE;tindex++){ 
     sum+=a[row][tindex]*b[tindex][column]; 
    } 

    *(shseg+(offset*sizeof(float))) = sum; 
    offset++; 
    } 
} 

任何人都可以解釋爲什麼使用指針?

+0

什麼是你無法理解的? – 2012-05-24 12:57:25

+4

你正在解決記憶中的一個問題......還有什麼看起來適合你? – RedX

+0

我已經看到,在許多代碼中,這種類型的東西如果(pid == fork()){}其他{*(shseg ....)} .i需要知道爲什麼之前使用指針(shseg)。什麼是實際的邏輯原因? – prjndhi

回答

1

這是因爲你展示的例子使用共享內存API,它提供了一塊平坦的內存,而不是一個浮動數組。因此,您需要手動執行所有指針操作。

你也可以投你的共享指針float*和使用索引,就像這樣:

shseg = shmat(handle,NULL,0); 
float *fshseg = (float*)shseg; 

... 

fshseg[index++] = sum; 
+1

@prjndhi'shmat'返回'void *'。 – dasblinkenlight

+1

不需要將一個'void *'強制轉換爲C中不同的(數據)指針。 – unwind

+0

@unwind這當然是對的。無論如何,我更喜歡這樣做,以便讓我的代碼讀者更容易看到類型被更改的事實。 – dasblinkenlight

0

好了,你這是被你的程序共享的內存分配的空間,你會全力以赴通過內存的方式,如果你沒有使用指針,你將無法獲得內存地址值,這就是爲什麼你需要使用它。

+0

如果我正在寫這行shseg = shmat(handle,NULL,0); ,那麼創建了多大的內存塊? – prjndhi