Manual Page Result
0
Command: malloc | Section: 3 | Source: 4.4BSD | File: malloc.3
MALLOC(3F) 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 may be
addressed as basevec(offset+1) ... basevec(offset+nelem). Falloc gets
extra bytes so that after address arithmetic, all the objects so ad-
dressed 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
mallocorfalloc is overrun or if some random number is handed to free.
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.
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 compu-
tations:
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)
4.3 Berkeley Distribution April 30, 1991 MALLOC(3F)