我正在开发一个主要用 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)
指定什么?
感谢您的时间。
我正在开发一个主要用 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)
指定什么?
感谢您的时间。
使用 Fortran 90+ 动态内存分配。除了作为 NWChem 中的历史文物之外,MA 绝对没有理由再存在了。
使用 初始化数组时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 页面上阅读更多内容。
但是有人可以提供解释: 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(用户:匿名,密码:匿名)我猜他们会返回该内存中的先前值。地点;只需通过连续调用两次并分配不同的值来尝试,然后跟踪第二个返回值。