glenda.party
term% ls -F
term% cat index.txt
MALLOC(2)                     System Calls Manual                    MALLOC(2)



NAME
       malloc, free, realloc, calloc - memory allocator

SYNOPSIS
       #include <u.h>
       #include <libc.h>

       void* malloc(long size)

       void  free(void *ptr)

       void* realloc(void *ptr, long size)

       void* calloc(long nelem, long elsize)

DESCRIPTION
       Malloc and free provide a simple memory allocation package.  Malloc re‐
       turns a pointer to a new block of at least size bytes.   The  block  is
       suitably  aligned  for  storage  of  any type of object.  No two active
       pointers from malloc will have the same value.

       The argument to free is a pointer to a block  previously  allocated  by
       malloc; this space is made available for further allocation.  It is le‐
       gal to free a null pointer; the effect is a no-op.

       Realloc changes the size of the block pointed to by ptr to  size  bytes
       and returns a pointer to the (possibly moved) block.  The contents will
       be unchanged up to the lesser of the new and old sizes.  The call real‐
       loc(0, size) means the same as

       Calloc  allocates  space for an array of nelem elements of size elsize.
       The space is initialized to zeros.  Free frees such a block.

   Alef
       Except for calloc, these routines are available from Alef; they use the
       same  arena  as  alloc.   Malloc  and realloc execute a check when they
       fail, rather than return nil.  Memory returned by  malloc  is  cleared.
       Realloc does not guarantee new memory is cleared unless ptr is nil.

SOURCE
       /sys/src/libc/port/malloc.c

SEE ALSO
       brk(2)

DIAGNOSTICS
       Malloc,  realloc  and  calloc return 0 if there is no available memory.
       Errstr is likely to be set.

BUGS
       The different specification of calloc is bizarre.

       User errors can corrupt the storage arena.  The most common gaffes  are
       (1) freeing an already freed block, (2) storing beyond the bounds of an
       allocated block, and (3) freeing data that was not  obtained  from  the
       allocator.  When malloc and free detect such corruption, they abort.



                                                                     MALLOC(2)