簡體   English   中英

Fortran77代碼中的動態內存分配(PNL分配器)

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM