plan9port

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

malloc.3 (3704B)


      1 .TH MALLOC 3
      2 .SH NAME
      3 malloc, mallocz, free, realloc, calloc, setmalloctag, setrealloctag, getmalloctag, getrealloctag \- memory allocator
      4 .SH SYNOPSIS
      5 .B #include <u.h>
      6 .br
      7 .B #include <libc.h>
      8 .PP
      9 .ta \w'\fLvoid* 'u
     10 .B
     11 void*	malloc(ulong size)
     12 .PP
     13 .B
     14 void*	mallocz(ulong size, int clr)
     15 .PP
     16 .B
     17 void	free(void *ptr)
     18 .PP
     19 .B
     20 void*	realloc(void *ptr, ulong size)
     21 .PP
     22 .B
     23 void*	calloc(ulong nelem, ulong elsize)
     24 .PP
     25 .B
     26 void	setmalloctag(void *ptr, ulong tag)
     27 .PP
     28 .B
     29 ulong	getmalloctag(void *ptr)
     30 .PP
     31 .B
     32 void	setrealloctag(void *ptr, ulong tag)
     33 .PP
     34 .B
     35 ulong	getrealloctag(void *ptr)
     36 .SH DESCRIPTION
     37 .I Malloc
     38 and
     39 .I free
     40 provide a simple memory allocation package.
     41 .I Malloc
     42 returns a pointer to a new block of at least
     43 .I size
     44 bytes.
     45 The block is suitably aligned for storage of any type of object.
     46 No two active pointers from
     47 .I malloc
     48 will have the same value.
     49 The call
     50 .B malloc(0)
     51 returns a valid pointer rather than null.
     52 .PP
     53 The argument to
     54 .I free
     55 is a pointer to a block previously allocated by
     56 .IR malloc ;
     57 this space is made available for further allocation.
     58 It is legal to free a null pointer; the effect is a no-op.
     59 The contents of the space returned by
     60 .I malloc
     61 are undefined.
     62 .I Mallocz
     63 behaves as 
     64 .IR malloc ,
     65 except that if 
     66 .I clr
     67 is non-zero, the memory returned will be zeroed.
     68 .PP
     69 .I Realloc
     70 changes the size of the block pointed to by
     71 .I ptr
     72 to
     73 .I size
     74 bytes and returns a pointer to the (possibly moved)
     75 block.
     76 The contents will be unchanged up to the
     77 lesser of the new and old sizes.
     78 .I Realloc
     79 takes on special meanings when one or both arguments are zero:
     80 .TP
     81 .B "realloc(0,\ size)
     82 means
     83 .LR malloc(size) ;
     84 returns a pointer to the newly-allocated memory
     85 .TP
     86 .B "realloc(ptr,\ 0)
     87 means
     88 .LR free(ptr) ;
     89 returns null
     90 .TP
     91 .B "realloc(0,\ 0)
     92 no-op; returns null
     93 .PD
     94 .PP
     95 .I Calloc
     96 allocates space for
     97 an array of
     98 .I nelem
     99 elements of size
    100 .IR elsize .
    101 The space is initialized to zeros.
    102 .I Free
    103 frees such a block.
    104 .PP
    105 The memory allocator on Plan 9 maintains two word-sized fields
    106 associated with each block, the ``malloc tag'' and the ``realloc tag''.
    107 By convention, the malloc tag is the PC that allocated the block,
    108 and the realloc tag the PC that last reallocated the block.
    109 These may be set or examined with 
    110 .IR setmalloctag ,
    111 .IR getmalloctag ,
    112 .IR setrealloctag ,
    113 and
    114 .IR getrealloctag .
    115 When allocating blocks directly with
    116 .I malloc
    117 and
    118 .IR realloc ,
    119 these tags will be set properly.
    120 If a custom allocator wrapper is used,
    121 the allocator wrapper can set the tags
    122 itself (usually by passing the result of
    123 .IR getcallerpc (3) 
    124 to 
    125 .IR setmalloctag )
    126 to provide more useful information about
    127 the source of allocation.
    128 .SH SOURCE
    129 .B \*9/src/lib9/malloc.c
    130 .br
    131 .B \*9/src/lib9/malloctag.c
    132 .SH SEE ALSO
    133 .I trump
    134 (in
    135 .MR acid (1) ),
    136 .MR getcallerpc (3)
    137 .SH DIAGNOSTICS
    138 .I Malloc, realloc
    139 and
    140 .I calloc
    141 return 0 if there is no available memory.
    142 .I Errstr
    143 is likely to be set.
    144 If the allocated blocks have no malloc or realloc tags,
    145 .I getmalloctag
    146 and
    147 .I getrealloctag
    148 return
    149 .BR ~0 .
    150 .PP
    151 The 
    152 .I trump
    153 library for
    154 .I acid
    155 can be used to obtain traces of malloc execution; see
    156 .MR acid (1) .
    157 .SH BUGS
    158 The different specification of
    159 .I calloc
    160 is bizarre.
    161 .PP
    162 User errors can corrupt the storage arena.
    163 The most common gaffes are (1) freeing an already freed block,
    164 (2) storing beyond the bounds of an allocated block, and (3)
    165 freeing data that was not obtained from the allocator.
    166 When
    167 .I malloc
    168 and
    169 .I free
    170 detect such corruption, they abort.
    171 .PP
    172 To avoid name conflicts with the system versions of these functions,
    173 .IR malloc ,
    174 .IR realloc ,
    175 .IR calloc ,
    176 and
    177 .I free
    178 are preprocessor macros defined as
    179 .IR p9malloc ,
    180 .IR p9realloc ,
    181 .IR p9calloc ,
    182 and
    183 .IR p9free ;
    184 see
    185 .MR intro (3) .