2012-05-24 48 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