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++;
  }
}

ポインタが使用される理由を誰かが説明できますか?

4

2 に答える 2

1

これは、あなたが示した例が共有メモリ API を使用しているためです。これは、フロートなどの配列ではなく、メモリのフラット チャンクを提供します。したがって、すべてのポインター操作を手動で行う必要があります。

次のように、共有ポインタをfloat*インデックスにキャストして使用することもできます。

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

...

fshseg[index++] = sum;
于 2012-05-24T13:01:14.180 に答える
0

さて、プログラムと共有されているメモリの割り当てられたスペースがあります。メモリをずっと使用することになります。ポインタを使用しなかった場合、メモリアドレス値を取得することはできません。あなたはそれを使用する必要があります。

于 2012-05-24T13:03:39.380 に答える