Museum

Home

Lab Overview

Retrotechnology Articles

Online Manuals

⇒ free(3F) — NEWS-os 4.1C

Media Vault

Software Library

Restoration Projects

Artifacts Sought

Related Articles

malloc(3)

MALLOC(3F)  —  NEWS-OS Programmer’s Manual

名称

malloc, free, falloc − メモリの割り当て

形式

subroutine malloc (size, addr)
integer size, addr

subroutine free (addr)
integer addr

subroutine falloc (nelem, elsize, clean, basevec, addr, offset)
integer nelem, elsize, clean, addr, offset

解説

malloc, falloc および free は、 汎用メモリの割り当てパッケージを 提供します。 malloc は、 偶数バイト目から始まる、 size バイト以上のブロックのアドレスを addr に返します。

falloc は、 サイズ elsize の要素 nelem 個からなる配列に空間を 割り当て、 addr にそのブロックのアドレスを 返します。 clean が1の場合、 このブロックはゼロになります。 そして、 記憶域を bsaevec(offset+1)...basevec(offset+elem) のようにアドレス付けできるように、 インデックスを offset に返します。 falloc は、 引数から計算されるよりもメモリーを多く取ります。 それは、 アドレス計算されたオブジェクトが全てブロック内に納まるように 考えられているからです。

free の引数は、 あらかじめ malloc または falloc で割り当てられたブロックのアドレスです。 この空間は、 別の割り当てに利用できるようになりますが、 その内容はそのまま残されます。 falloc で割り当てられたブロックを 解放する場合、 free を 呼び出す時には addr を 使い、 basevec(offset+1) を 使ってはいけません。 すでに、 mallocまたはfalloc で割り当てられた空間が過大な場合、 あるいは、 free にいい加減な値を 渡した場合は、 異常終了します。

診断

利用できるメモリがない場合、 あるいはブロックの境界外にデータを 格納して該当領域が信頼できなくなった場合、 malloc と falloc は addr に0を セットします。 次の例に、 メモリを 獲得し、 それを サブプログラムで使う方法を 示します。

       integer addr, work(1), offset
         ...
      call falloc ( n, 4, 0, work, addr, offset )
      do 10 i = 1, n
      work(offset+i) = ...
10    continue

次の例では、 ディメンジョン情報を 入力し、 2個の配列と2個のベクトルに空間を 割り当て、 サブルーチン doitを 呼び出し計算します。

       integer addr, dummy(1), offs
      read ∗, k, l, m
      indm1   = 1
      indm2   = indm1 + k∗l
      indm3   = indm2 + l∗m
      indsym  = indm3 + k∗m
      lsym = n∗(n+1)/2
      indv  = indsym + lsym
      indtot = indv + m
      call falloc ( indtot, 4, 0, dummy, addr, offs )
      call doit( dummy(indm1+offs), dummy(indm2+offs),
     .           dummy(indm3+offs), dummy(indsym+offs),
     .           dummy(indv +offs), m, n, lsym )
      end
      subroutine doit( arr1, arr2, arr3, vsym, vec, m, n, lsym )
      real arr1(k,l), arr2(l,m), arr3(k,m), vsym(lsym), v2(m)
         ...

これらの関数は CISC NEWS 用の Fortran にしかありません。

関連ファイル

/usr/lib/libU77.a

関連事項

malloc(3)

NEWS-OSRelease 4.1C

Typewritten Software • bear@typewritten.org • Edmonds, WA 98026