Museum

Home

Lab Overview

Retrotechnology Articles

⇒ Online Manual

Media Vault

Software Library

Restoration Projects

Artifacts Sought

Related Articles

malloc(3)

MALLOC(3F)                           BSD                            MALLOC(3F)



NAME
     malloc, free, falloc - memory allocator

SYNOPSIS
     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

DESCRIPTION
     malloc, falloc, and free provide a general-purpose memory allocation
     package.  malloc returns in addr the address of a block of at least size
     bytes beginning on an even-byte boundary.

     falloc allocates space for an array of nelem elements of size elsize and
     returns the address of the block in addr. It zeros the block if clean is
     1.  It returns in offset an index such that the storage can be addressed
     as basevec(offset+1) ... basevec(offset+nelem). falloc gets extra bytes
     so that, after address arithmetic, all the objects so addressed are
     within the block.

     The argument to free is the address of a block previously allocated by
     malloc or falloc; this space is made available for further allocation,
     but its contents are left undisturbed.  To free blocks allocated by
     falloc, use addr in calls to free; do not use basevec(offset+1).

     Needless to say, grave disorder will result if the space assigned by
     malloc or falloc is overrun or if some random number is handed to free.

EXAMPLES
     The following example shows how to obtain memory and use it within a
     subprogram:

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

     The next example reads in dimension information, allocates space for two
     arrays and two vectors, and calls subroutine doit to do the computations:

           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)
              ...

FILES
     /usr/lib/libU77.a

SEE ALSO
     malloc(3)

DIAGNOSTICS
     malloc and falloc set addr to 0 if there is no available memory or if the
     arena has been detectably corrupted by storing outside the bounds of a
     block.

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