我已经看到很多并行编程代码,比如找到最大数组,矩阵乘法等,使用指针。我不明白为什么使用它。例如:(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 :(得分:1)
这是因为您展示的示例使用共享内存API,它为您提供了一大块内存,而不是一个浮点数组。因此,您需要手动执行所有指针操作。
您还可以将共享指针转换为float*
并使用索引,如下所示:
shseg = shmat(handle,NULL,0);
float *fshseg = (float*)shseg;
...
fshseg[index++] = sum;
答案 1 :(得分:0)
好吧,你有一个已分配的内存空间与你的程序共享,你将一直通过内存,如果你没有使用指针你将无法获得内存地址值,这就是你需要使用它的原因。