我正在开发一个主要在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)
会指定什么?
感谢您的时间。
答案 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完全没有理由存在。