>>159
>何故引数がコピーされるのでしょうか?
サブルーチン側が連続した配列を想定しているのに
連続していない(可能性がある)配列が渡されたから。

program test
 integer, dimension(5,4) :: a = 1
 integer, dimension(3,2) :: b = 2
 call foo(a(2:4,2:3))
 call foo(b)
 print *, a
 print *, b
contains
 subroutine foo(x)
  integer, dimension(3,2), intent(inout) :: x
  x = 3
 end subroutine foo
end program test

>Fortranって call by reference (call by value の対義語)じゃないの?
この場合、ちゃんと「一時的な配列の先頭アドレス」が渡されます。

>また、コピーされることの弊害として、どのような事が考えられるでしょうか?
配列のコピー・書き戻しによるオーバーヘッドの増加、使用メモリ量の増加等。