193 lines · 4.0 KB · Text
RawDownload
.TH MALLOC 9.SH NAMEmalloc, mallocz, smalloc, realloc, calloc, free, msize, setmalloctag, setrealloctag, getmalloctag, getrealloctag, malloctopoolblock \- kernel memory allocator.SH SYNOPSIS.ta \w'\fLvoid* 'u.Bvoid*	malloc(ulong size).PP.Bvoid*	mallocalign(ulong size, ulong align, long offset, ulong span).PP.Bvoid*	mallocz(ulong size, int clr).PP.Bvoid*	smalloc(ulong size).PP.Bvoid*	realloc(void *p, ulong size).PP.Bvoid*	calloc(ulong n, ulong szelem).PP.Bvoid	free(void *ptr).PP.Bulong	msize(void *ptr).PP.Bvoid	setmalloctag(void *ptr, ulong tag).PP.Bulong	getmalloctag(void *ptr).PP.Bvoid	setrealloctag(void *ptr, ulong tag).PP.Bulong	getrealloctag(void *ptr).PP.Bvoid*	malloctopoolblock(void*).PP.SH DESCRIPTIONThese are kernel versions of the functions in.IR malloc (2).They allocate memory from the.B mainmemmemory pool,which is managed bythe allocator.IR pool (2),which in turn replenishes the pool as required by calling.IR xalloc (9).All but.I smalloc(which calls.IR sleep (9))may safely be called by interrupt handlers..PP.I Mallocreturns a pointer to a block of at least.I sizebytes, initialised to zero.The block is suitably aligned for storage of any type of object.The call.B malloc(0)returns a valid pointer rather than null..I Malloczis similar, but only clears the memory if.I clris non-zero..PP.I Smallocreturns a pointer to a block of.I sizebytes, initialised to zero.If the memory is not immediately available,.I smallocretries every 100 milliseconds until the memory is acquired..PP.I Mallocalignallocates a block of at least .I nbytes of memory respecting alignment contraints.If.I alignis non-zero,the returned pointer is aligned to be equal to.I offsetmodulo.IR align .If.I spanis non-zero,the.I nbyte block allocated will not span a.IR span -byteboundary..PP.I Reallocchanges the size of the block pointed to by.I pto.I sizebytes,if possible without moving the data,and returns a pointer to the block.The contents are unchanged up to the lesser of old and new sizes,and any new space allocated is initialised to zero..I Realloctakes on special meanings when one or both arguments are zero:.TP.B "realloc(0,\ size)means.LR malloc(size) ;returns a pointer to the newly-allocated memory.TP.B "realloc(ptr,\ 0)means.LR free(ptr) ;returns null.TP.B "realloc(0,\ 0)no-op; returns null.PD.PP.I Callocreturns a pointer to a block of memory of at least.I "n*szelem"bytes, initialised to zero.New code should use.I malloczinstead..PPThe argument to.I freeis a pointer to a block of memory allocated by one of the routines above, whichis returned to the allocation pool, or a null pointer, which is ignored..PPWhen a block is allocated, sometimes there is some extra unused space at the end..I Msizegrows the block to encompass this unused space and returns the new numberof bytes that may be used..PPThe memory allocator maintains two word-sized fieldsassociated with each block, the ``malloc tag'' and the ``realloc tag''.By convention, the malloc tag is the PC that allocated the block,and the realloc tag the PC that last reallocated the block.These may be set or examined with .IR setmalloctag ,.IR getmalloctag ,.IR setrealloctag ,and.IR getrealloctag .When allocating blocks directly with.I mallocand.IR realloc ,these tags will be set properly.If a custom allocator wrapper is used,the allocator wrapper can set the tagsitself (usually by passing the result of.IR getcallerpc (2) to .IR setmalloctag )to provide more useful information aboutthe source of allocation..PP.I Malloctopoolblocktakes the address of a block returned by.I mallocand returns the address of the correspondingblock allocated by the.IR pool (2)routines..SH SOURCE.B /sys/src/9/port/alloc.c.SH DIAGNOSTICSAll functions except.I smallocreturn a null pointer if space is unavailable.If the allocated blocks have no malloc or realloc tags,.I getmalloctagand.I getrealloctagreturn.BR ~0 ..SH SEE ALSO.IR pool (2),.IR xalloc (9)