次のことを考慮してください。
subroutine send_to_friend(a,b,c,request)
implicit none
include 'mpif.h' !use mpi if you've built the mpif90 bindings...
real a,b,c
real buff(3)
integer tag,dest,ierr,request
tag = 50
dest = 0
buff(1) = a
buff(2) = b
buff(3) = c
call MPI_Isend(buff,3,MPI_REAL,dest,tag,MPI_COMM_WORLD,request,ierr)
return
end subroutine send_to_friend
これはbuff
スタックに置かれるため(とにかくほとんどの最新のコンパイラで)機能しない可能性がありますが、サブルーチンが終了するたびに完全に消去されます。ここ(セクション10)によると、プロシージャを終了すると、割り当てられた配列の割り当てが自動的に解除されるため、配列の割り当ても役に立ちません。Cでは、これはメモリリークになります(これも悪いことです)。このようなことをするための適切な方法は何ですか?save
属性を使用して配列を宣言する必要がありますか?(static
Cで)。このデザインはそもそも本質的に欠陥がありますか?