Fortran中的自动数组空间分配的问题

自动数组,Automatic Array,见下例:

RECURSIVE SUBROUTINE F( N )
INTEGER :: N
REAL :: X ( N ) ! an automatic array
REAL :: Y ( 1000 ) ! an explicit-shape local array on the stack

其中X属于自动数组,即从一个运行的表达式获得的数组大小。默认情况下,自动数组是分配在栈上的。

当N值很大的,超过栈的大小,程序就会报“Stack Overflow ”的异常。当然你可以加大栈的空间来避免这个问题。不过在Intel Fortran编译器下可以用/heap-arrays编译开关解决这个问题:(Optimization > Heap Arrays

设这值个为0,则所有的自动数组和临时数组都会被分配到堆上,这样就不会出栈溢出的异常了。

还有,再确认一点是,Fortran中是Pass by Reference的。

Advertisements
此条目发表在未分类分类目录。将固定链接加入收藏夹。

发表评论

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / 更改 )

Twitter picture

You are commenting using your Twitter account. Log Out / 更改 )

Facebook photo

You are commenting using your Facebook account. Log Out / 更改 )

Google+ photo

You are commenting using your Google+ account. Log Out / 更改 )

Connecting to %s