Fortran77代码中的动态内存分配(PNL分配器)

时间:2013-05-22 15:44:23

标签: memory-management fortran fortran77

我正在开发一个主要在Fortan77中编写的应用程序。 由于fortran77不支持动态内存分配,因此代码使用了 PNL动态内存分配器:http://www.emsl.pnl.gov/docs/global/ma/MAapi.html

但有人可以提供以下解释:

   int_mb(index + i)

int_mb和类似dlb_mb的回复是什么?

如果cost是整数,那么dlb_mb(cost)会指定什么?

感谢您的时间。

3 个答案:

答案 0 :(得分:0)

  

但有人可以提供以下解释:int_mb(index + i)

设置(例如零)分配的内存。

http://www.emsl.pnl.gov/docs/global/ma/MA_alloc_get.html

#include "mafdecls.h"

      logical ok
      integer mhandle
      integer index
      integer i

      ok = MA_alloc_get(MT_INT, 5, 'heap int block', mhandle, index)
      if (ok) then
          do 10 i = 0, 4
              int_mb(index + i) = 0
10        continue
      endif

  

int_mb和类似dlb_mb的回复是什么?

dbl_mb即是。

来自https://svn.pnl.gov/svn/hpctools/trunk/ga/ma/mafdecls.fh.in(用户:匿名,pw:匿名)我猜他们会在该记忆中返回之前的值。禄;只需通过连续调用两次并分配不同的值来尝试,然后跟踪第二个返回值。

答案 1 :(得分:0)

使用ma_alloc_get初始化数组时,指定要分配的内存类型(int = mt_int,double = mt_dbl等)并且它会为您提供内存句柄和索引。索引用于访问MA数组中的特定值。

假设你已经分配了一个整数数组,index就是你的索引。 int_mb(index)将是该数组中的第一个元素。因此,int_mb(index + i)将是元素i+1

dbl_mb(cost)将位于双重区块cost的双倍位置。如果a = dbl_mb(cost)指向初始化的内存块,dbl_mb(cost) = 123.45将设置值,cost将访问此值。

我个人喜欢将'mt'视为'内存类型',将'mb'视为'内存块',因为这是他们本来在做的事情。 'mt'变量是内部整数,因此分配器知道要分配给哪个内存块,'mb'调用正在访问该块上的特定位置。

您可以在API page上阅读更多内容。

答案 2 :(得分:0)

使用Fortran 90+动态内存分配。除了作为NWChem的历史文物之外,MA完全没有理由存在。