如何在Fortran中控制内存分配?

如何在Fortran中控制内存分配?,fortran,dynamic-memory-allocation,Fortran,Dynamic Memory Allocation,根据Fortran标准 如果出现STAT=说明符,则成功执行ALLOCATE语句将导致STAT变量的定义值为零。如果在执行ALLOCATE语句期间发生错误,stat变量将使用依赖于处理器的正整数值定义 到目前为止还不错。然而,现代操作系统倾向于使用延迟内存分配,即在执行ALLOCATE语句时不会出现错误情况。程序继续运行,但当需要超出内存时,它会崩溃 我认为在分配中使用source语句可以保留对内存的控制,但至少在我的MacBookPro上尝试使用gfortran时,它不起作用。是否有任何解决方

根据Fortran标准

如果出现STAT=说明符,则成功执行ALLOCATE语句将导致STAT变量的定义值为零。如果在执行ALLOCATE语句期间发生错误,stat变量将使用依赖于处理器的正整数值定义

到目前为止还不错。然而,现代操作系统倾向于使用延迟内存分配,即在执行ALLOCATE语句时不会出现错误情况。程序继续运行,但当需要超出内存时,它会崩溃


我认为在分配中使用source语句可以保留对内存的控制,但至少在我的MacBookPro上尝试使用gfortran时,它不起作用。是否有任何解决方法,或者我们应该放弃对内存管理的控制?

否,这超出了Fortran的范围。即使在C语言中使用access系统函数,也无法执行任何操作。我们可能有一个重复的.Related,当然,
source=
与此无关。它只是说明要复制什么数组,这不是Fortran的问题。ALLOCATE只能检测操作系统在调用分配内存时是否报告了错误。如果成功了,但操作系统后来决定无法访问分配的内存,Fortran就无能为力了。您可以通过直接调用其API来调查操作系统是否提供了对更多控件的访问,但这意味着绕过分配/解除分配。我不会说stat=没有用,但您是正确的,在这种特殊情况下,它可能对您没有帮助。就个人而言,我认为延迟分配的概念是一个错误的特征。这冒犯了我作为前操作系统开发人员的感情,因为操作系统在欺骗你。