100 lines
1.8 KiB
Text
100 lines
1.8 KiB
Text
|
.TH BIN 2
|
||
|
.SH NAME
|
||
|
binalloc, bingrow, binfree \- grouped memory allocation
|
||
|
.SH SYNOPSIS
|
||
|
.B #include <u.h>
|
||
|
.br
|
||
|
.B #include <libc.h>
|
||
|
.br
|
||
|
.B #include <bin.h>
|
||
|
.PP
|
||
|
.ta \w'\fLvoid* 'u
|
||
|
.PP
|
||
|
.B
|
||
|
typedef struct Bin Bin;
|
||
|
.PP
|
||
|
.B
|
||
|
void *binalloc(Bin **bp, ulong size, int clr);
|
||
|
.PP
|
||
|
.B
|
||
|
void *bingrow(Bin **bp, void *op, ulong osize,
|
||
|
.br
|
||
|
.B
|
||
|
ulong size, int clr);
|
||
|
.PP
|
||
|
.B
|
||
|
void binfree(Bin **bp);
|
||
|
.SH DESCRIPTION
|
||
|
These routines provide simple grouped memory allocation and deallocation.
|
||
|
Items allocated with
|
||
|
.I binalloc
|
||
|
are added to the
|
||
|
.I Bin
|
||
|
pointed to by
|
||
|
.IR bp .
|
||
|
All items in a bin may be freed with one call to
|
||
|
.IR binfree ;
|
||
|
there is no way to free a single item.
|
||
|
.PP
|
||
|
.I Binalloc
|
||
|
returns a pointer to a new block of at least
|
||
|
.I size
|
||
|
bytes.
|
||
|
The block is suitably aligned for storage of any type of object.
|
||
|
No two active pointers from
|
||
|
.I binalloc
|
||
|
will have the same value.
|
||
|
The call
|
||
|
.B binalloc(0)
|
||
|
returns a valid pointer rather than null.
|
||
|
If
|
||
|
.I clr
|
||
|
is non-zero, the allocated memory is set to 0;
|
||
|
otherwise, the contents are undefined.
|
||
|
.PP
|
||
|
.I Bingrow
|
||
|
is used to extend the size of a block of memory returned by
|
||
|
.IR binalloc .
|
||
|
.I Bp
|
||
|
must point to the same bin group used to allocate the original block,
|
||
|
and
|
||
|
.I osize
|
||
|
must be the last size used to allocate or grow the block.
|
||
|
A pointer to a block of at least
|
||
|
.I size
|
||
|
bytes is returned, with the same contents in the first
|
||
|
.I osize
|
||
|
locations.
|
||
|
If
|
||
|
.I clr
|
||
|
is non-zero, the remaining bytes are set to 0,
|
||
|
and are undefined otherwise.
|
||
|
If
|
||
|
.I op
|
||
|
is
|
||
|
.BR nil ,
|
||
|
it and
|
||
|
.I osize
|
||
|
are ignored, and the result is the same as calling
|
||
|
.IR binalloc .
|
||
|
.PP
|
||
|
.I Binalloc
|
||
|
and
|
||
|
.I bingrow
|
||
|
allocate large chunks of memory using
|
||
|
.IR malloc (2)
|
||
|
and return pieces of these chunks.
|
||
|
The chunks are
|
||
|
.IR free 'd
|
||
|
upon a call to
|
||
|
.IR binfree .
|
||
|
.SH SOURCE
|
||
|
.B /sys/src/libbin
|
||
|
.SH SEE ALSO
|
||
|
.IR malloc (2)
|
||
|
.SH DIAGNOSTICS
|
||
|
.I binalloc
|
||
|
and
|
||
|
.I bingrow
|
||
|
return 0 if there is no available memory.
|