4.3BSD-Reno/share/man/cat3f/malloc.0
MALLOC(3F) 1985 MALLOC(3F)
NNAAMMEE
malloc, free, falloc - memory allocator
SSYYNNOOPPSSIISS
ssuubbrroouuttiinnee mmaalllloocc ((ssiizzee,, aaddddrr))
iinntteeggeerr ssiizzee,, aaddddrr
ssuubbrroouuttiinnee ffrreeee ((aaddddrr))
iinntteeggeerr aaddddrr
ssuubbrroouuttiinnee ffaalllloocc ((nneelleemm,, eellssiizzee,, cclleeaann,, bbaasseevveecc,, aaddddrr,, ooffffsseett))
iinntteeggeerr nneelleemm,, eellssiizzee,, cclleeaann,, aaddddrr,, ooffffsseett
DDEESSCCRRIIPPTTIIOONN
_M_a_l_l_o_c, _f_a_l_l_o_c and _f_r_e_e provide a general-purpose memory
allocation package. _M_a_l_l_o_c returns in _a_d_d_r the address of a
block of at least _s_i_z_e bytes beginning on an even-byte boun-
dary.
_F_a_l_l_o_c allocates space for an array of _n_e_l_e_m elements of
size _e_l_s_i_z_e and returns the address of the block in _a_d_d_r. It
zeros the block if _c_l_e_a_n is 1. It returns in _o_f_f_s_e_t an
index such that the storage may be addressed as
_b_a_s_e_v_e_c(_o_f_f_s_e_t+_1) ... _b_a_s_e_v_e_c(_o_f_f_s_e_t+_n_e_l_e_m). _F_a_l_l_o_c gets
extra bytes so that after address arithmetic, all the
objects so addressed are within the block.
The argument to _f_r_e_e is the address of a block previously
allocated by _m_a_l_l_o_c or _f_a_l_l_o_c; this space is made available
for further allocation, but its contents are left undis-
turbed. To free blocks allocated by _f_a_l_l_o_c, use _a_d_d_r in
calls to _f_r_e_e, do not use _b_a_s_e_v_e_c(_o_f_f_s_e_t+_1).
Needless to say, grave disorder will result if the space
assigned by _m_a_l_l_o_cor_f_a_l_l_o_c is overrun or if some random
number is handed to _f_r_e_e.
DDIIAAGGNNOOSSTTIICCSS
_M_a_l_l_o_c and _f_a_l_l_o_c set _a_d_d_r 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
Printed 7/27/90 May 1
MALLOC(3F) 1985 MALLOC(3F)
The next example reads in dimension information, allocates
space for two arrays and two vectors, and calls subroutine
_d_o_i_t 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)
...
FFIILLEESS
/usr/lib/libU77.a
SSEEEE AALLSSOO
malloc(3)
Printed 7/27/90 May 2