[英]Dynamic Memory Allocation in Fortran77 code (PNL Allocator)
我正在開發一個主要用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)
指定什么?
感謝您的時間。
但是有人可以提供以下解釋: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:匿名)中,我猜他們會在該內存處返回先前的值。 loc .; 只需通過連續兩次調用並分配不同的值來進行嘗試,然后跟蹤第二個返回值。
當使用ma_alloc_get
初始化數組時,您可以指定要分配的內存類型(int = mt_int
,double = mt_dbl
等),它為您提供內存句柄和索引。 該索引用於訪問MA數組中的特定值。
假設您分配了一個整數數組,而index
是您的索引。 int_mb(index)
將是該數組中的第一個元素。 因此, int_mb(index + i)
將是元素i+1
。
dbl_mb(cost)
將是double塊中位於cost
處的double。 a = dbl_mb(cost)
將訪問此值,而dbl_mb(cost) = 123.45
將設置該值,前提是cost
指向已初始化的內存塊。
我個人喜歡將“ mt”視為“內存類型”,將“ mb”視為“內存塊”,因為這實際上是他們所做的。 “ mt”變量是內部整數,因此分配器知道要分配給哪個內存塊,並且“ mb”調用正在訪問該塊上的特定位置。
您可以在其API頁面上閱讀更多內容。
使用Fortran 90+動態內存分配。 除了作為NWChem中的歷史產物之外,MA絕對沒有理由再存在了。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.