1

我正在开发一个主要用 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)指定什么?

感谢您的时间。

4

3 回答 3

0

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

于 2014-09-12T23:14:05.683 回答
0

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

假设您分配了一个整数数组并且index是您的索引。 int_mb(index)将是该数组中的第一个元素。因此,int_mb(index + i)将是 element i+1

dbl_mb(cost)将是位于cost双块中的双倍。 a = dbl_mb(cost)将访问该值,同时dbl_mb(cost) = 123.45设置该值,前提是cost指向已初始化的内存块。

我个人喜欢将“mt”视为“内存类型”,将“mb”视为“内存块”,因为它们本质上就是这样做的。'mt' 变量是内部整数,因此分配器知道要分配到哪个内存块,并且 'mb' 调用正在访问该块上的特定位置。

您可以在他们的API 页面上阅读更多内容。

于 2013-05-29T21:00:00.033 回答
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(用户:匿名,密码:匿名)我猜他们会返回该内存中的先前值。地点;只需通过连续调用两次并分配不同的值来尝试,然后跟踪第二个返回值。

于 2013-05-22T18:55:19.827 回答