我有两个变量:
boost::array my_boost_array_variable_1<float, 3>;
boost::array my_boost_array_variable_2<float, 3>;
现在我想用以下签名调用C函数:
int MPI_Allreduce ( void *sendbuf, void *recvbuf, ...);
我想将my_boost_array_variable_1
和my_boost_array_variable_2
的特定元素的地址作为MPI_Allreduce的第一个和第二个参数传递:
MPI_Allreduce(&my_boost_array_variable_1[2],
&my_boost_array_variable_2[2], ...
或者我应该这样做:
MPI_Allreduce(my_boost_array_variable_1.c_array() + 2,
my_boost_array_variable_2.c_array() + 2, ...
更新: C函数需要一个连续的数据块,从void * sendbuf开始。这方面的问题是这两个呼叫在这方面是否正确。 &amp; my_boost_array_variable_1 [2]是否指向与my_boost_array_variable_1.c_array()+ 2相同的位置?这些电话是否相同?
答案 0 :(得分:2)
首先,对我来说,第二个更清楚。但实际上我认为他们是平等的。
答案 1 :(得分:1)
根据http://www.boost.org/doc/libs/1_52_0/doc/html/boost/array.html NEITHER版本将抛出。 (无法用我的小名声评论: - ))
答案 2 :(得分:0)
系统依赖于哪一个更快,你可以看到你自己的汇编代码。
第一种方法更安全,因为如果你试图解决不合法的索引,它会引发异常。
第二种方法通常更快,因为您只有一次取消引用。