2012-11-29 30 views
3

我有兩個變量:可以將&my_boost_array_variable [2]傳遞給期望void *的C函數嗎?

boost::array my_boost_array_variable_1<float, 3>; 
boost::array my_boost_array_variable_2<float, 3>; 

現在我想調用C函數具有以下簽名:

​​

我想通過我的my_boost_array_variable_1my_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開始。這裏的問題是這兩個電話在這方面是否正確。 & my_boost_array_variable_1 [2]指向與my_boost_array_variable_1.c_array()+ 2相同的位置嗎?這些電話是否相同?

回答

2

對我來說首先是更清晰然後第二。但實際上我認爲他們是平等的。

0

系統依賴哪個更快,你可以看到你自己的彙編代碼。

第一種方法更安全,因爲如果您嘗試解決非合法索引問題,它會拋出異常。

第二種方法通常更快,因爲您只有一個解除引用。

相關問題