plan9port

fork of plan9port with libvec, libstr and libsdb
Log | Files | Refs | README | LICENSE

bin.3 (1883B)


      1 .TH BIN 3
      2 .SH NAME
      3 binalloc, bingrow, binfree \- grouped memory allocation
      4 .SH SYNOPSIS
      5 .B #include <u.h>
      6 .br
      7 .B #include <libc.h>
      8 .br
      9 .B #include <bin.h>
     10 .PP
     11 .ta \w'\fLvoid* 'u
     12 .PP
     13 .B
     14 typedef struct Bin	Bin;
     15 .PP
     16 .B
     17 void	*binalloc(Bin **bp, ulong size, int clr);
     18 .PP
     19 .B
     20 void	*bingrow(Bin **bp, void *op, ulong osize,
     21 .br
     22 .B
     23 	    ulong size, int clr);
     24 .PP
     25 .B
     26 void	binfree(Bin **bp);
     27 .SH DESCRIPTION
     28 These routines provide simple grouped memory allocation and deallocation.
     29 Items allocated with
     30 .I binalloc
     31 are added to the
     32 .I Bin
     33 pointed to by
     34 .IR bp .
     35 All items in a bin may be freed with one call to
     36 .IR binfree ;
     37 there is no way to free a single item.
     38 .PP
     39 .I Binalloc
     40 returns a pointer to a new block of at least
     41 .I size
     42 bytes.
     43 The block is suitably aligned for storage of any type of object.
     44 No two active pointers from
     45 .I binalloc
     46 will have the same value.
     47 The call
     48 .B binalloc(0)
     49 returns a valid pointer rather than null.
     50 If
     51 .I clr
     52 is non-zero, the allocated memory is set to 0;
     53 otherwise, the contents are undefined.
     54 .PP
     55 .I Bingrow
     56 is used to extend the size of a block of memory returned by
     57 .IR binalloc .
     58 .I Bp
     59 must point to the same bin group used to allocate the original block,
     60 and
     61 .I osize
     62 must be the last size used to allocate or grow the block.
     63 A pointer to a block of at least
     64 .I size
     65 bytes is returned, with the same contents in the first
     66 .I osize
     67 locations.
     68 If
     69 .I clr
     70 is non-zero, the remaining bytes are set to 0,
     71 and are undefined otherwise.
     72 If
     73 .I op
     74 is
     75 .BR nil ,
     76 it and
     77 .I osize
     78 are ignored, and the result is the same as calling
     79 .IR binalloc .
     80 .PP
     81 .I Binalloc
     82 and
     83 .I bingrow
     84 allocate large chunks of memory using
     85 .MR malloc (3)
     86 and return pieces of these chunks.
     87 The chunks are
     88 .IR free 'd
     89 upon a call to
     90 .IR binfree .
     91 .SH SOURCE
     92 .B \*9/src/libbin
     93 .SH SEE ALSO
     94 .MR malloc (3)
     95 .SH DIAGNOSTICS
     96 .I binalloc
     97 and
     98 .I bingrow
     99 return 0 if there is no available memory.