我正在运行一个FORTRAN程序,它为相当大的数组动态分配内存,有时它们不适合内存。
因此分配
allocate(my_array(really big_number))
会给出错误
Operating system error: Cannot allocate memory
Allocation would exceed memory limit
,程序将退出。我想知道是否有任何方法可以捕获或测试内存是否可用,以便我可以采取适当的措施,如果我不允许分配这么大的数组?
答案 0 :(得分:1)
使用:allocate(my_array(really big_number),stat=ierror)
使用stat=
说明符,分配的状态将存储在指定的变量中(示例中为ierror
)。零表示分配成功,非零表示失败。
来自ALLOCATE
声明中的Fortran 90标准(ftp://ftp.nag.co.uk/sc22wg5/N001-N1100/N692.pdf):
如果
STAT=
说明符存在,则成功执行 ALLOCATE语句导致使用a定义stat-variable 值为零。如果在执行
ALLOCATE
期间出现错误情况 声明,stat变量定义为 处理器相关的正整数值。如果出现错误情况 在执行不包含的ALLOCATE
语句期间发生STAT=
说明符,可执行程序的执行是 终止。