1 .\" $NetBSD: malloc.3,v 1.38 2010/05/03 08:23:20 jruoho Exp $
3 .\" Copyright (c) 1980, 1991, 1993
4 .\" The Regents of the University of California. All rights reserved.
6 .\" This code is derived from software contributed to Berkeley by
7 .\" the American National Standards Committee X3, on Information
8 .\" Processing Systems.
10 .\" Redistribution and use in source and binary forms, with or without
11 .\" modification, are permitted provided that the following conditions
13 .\" 1. Redistributions of source code must retain the above copyright
14 .\" notice, this list of conditions and the following disclaimer.
15 .\" 2. Redistributions in binary form must reproduce the above copyright
16 .\" notice, this list of conditions and the following disclaimer in the
17 .\" documentation and/or other materials provided with the distribution.
18 .\" 3. Neither the name of the University nor the names of its contributors
19 .\" may be used to endorse or promote products derived from this software
20 .\" without specific prior written permission.
22 .\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
23 .\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
24 .\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
25 .\" ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
26 .\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
27 .\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
28 .\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
29 .\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
30 .\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
31 .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
34 .\" @(#)malloc.3 8.1 (Berkeley) 6/4/93
35 .\" $FreeBSD: src/lib/libc/stdlib/malloc.3,v 1.73 2007/06/15 22:32:33 jasone Exp $
47 .Nd general purpose memory allocation functions
53 .Fn malloc "size_t size"
55 .Fn calloc "size_t number" "size_t size"
57 .Fn realloc "void *ptr" "size_t size"
59 .Fn reallocf "void *ptr" "size_t size"
63 .Fn freezero "void *ptr" "size_t size"
69 bytes of uninitialized memory.
70 The allocated space is suitably aligned (after possible pointer coercion)
71 for storage of any type of object.
72 If the space is at least
76 the returned memory will be page boundary aligned as well.
80 function allocates space for
86 The result is identical to calling
90 with the exception that the allocated memory is explicitly initialized
95 function changes the size of the previously allocated memory referenced by
100 The contents of the memory are unchanged up to the lesser of the new and
102 If the new size is larger,
103 the value of the newly allocated portion of the memory is undefined.
104 Upon success, the memory referenced by
106 is freed and a pointer to the newly allocated memory is returned.
109 may move the memory allocation, resulting in a different return value than
117 function behaves identically to
119 for the specified size.
123 function call is identical to the realloc function call, except that it
124 will free the passed pointer when the requested memory cannot be allocated.
129 specific API designed to ease the problems with traditional coding styles
130 for realloc causing memory leaks in libraries.
134 function causes the allocated memory referenced by
136 to be made available for future allocations.
145 function is similar to the
148 Cached free objects are cleared with
149 .Xr explicit_bzero 3 .
152 argument must be equal to or smaller than the size of the earlier allocation.
153 .Sh IMPLEMENTATION NOTES
156 implementation is based on a port of the
158 kernel slab allocator, appropriately modified for a user process
161 The slab allocator breaks memory allocations up to 8KB into 80 zones.
162 Each zone represents a fixed allocation size in multiples of some
164 The chunking is a power-of-2 but the fixed allocation size is not.
165 For example, a 1025-byte request is allocated out of the zone with a
166 chunking of 128, thus in multiples of 1152 bytes.
167 The minimum chunking, used for allocations in the 0-127 byte range,
168 is 8 bytes (16 of the 80 zones).
169 Beyond that the power-of-2 chunking is between 1/8 and 1/16 of the
170 minimum allocation size for any given zone.
172 As a special case any power-of-2-sized allocation within the zone
173 limit (8K) will be aligned to the same power-of-2 rather than that
174 zone's (smaller) chunking.
175 This is not something you can depend upon for
177 but it is used internally to optimize
178 .Xr posix_memalign 3 .
180 Each zone reserves memory in 64KB blocks.
181 Actual memory use tends to be significantly less as only the pages
182 actually needed are faulted in.
183 Allocations larger than 8K are managed using
185 and tracked with a hash table.
187 The zone mechanism results in well-fitted allocations with little
188 waste in a long-running environment which makes a lot of allocations.
189 Short-running environments which do not make many allocations will see
190 a bit of extra bloat due to the large number of zones but it will
191 be almost unnoticeable in the grand scheme of things.
192 To reduce bloat further the normal randomized start offset implemented
193 in the kernel version of the allocator to improve L1 cache fill is
194 disabled in the libc version.
196 The zone mechanism also has the nice side effect of greatly reducing
197 fragmentation over the original
201 is directly supported by keeping track of newly-allocated zones which
202 will be demand-zero'd by the system.
203 If the allocation is known to be zero'd we do not bother
206 If it is a reused allocation we
210 threading is supported by duplicating the primary structure.
213 which is unable to immediately acquire a mutex on the last primary
214 structure it used will switch to a different primary structure.
215 At the moment this is more of a quick hack than a solution, but it works.
221 functions return a pointer to the allocated memory if successful; otherwise
224 pointer is returned and
233 functions return a pointer, possibly identical to
235 to the allocated memory
236 if successful; otherwise a
238 pointer is returned, and
242 if the error was the result of an allocation failure.
245 function always leaves the original buffer intact
246 when an error occurs, whereas
248 deallocates it in this case.
252 function returns no value.
256 be careful to avoid the following idiom:
257 .Bd -literal -offset indent
258 if ((p = malloc(number * size)) == NULL)
259 err(EXIT_FAILURE, "malloc");
262 The multiplication may lead to an integer overflow.
269 must be used, be sure to test for overflow:
270 .Bd -literal -offset indent
271 if (size && number > SIZE_MAX / size) {
273 err(EXIT_FAILURE, "allocation");
279 one must be careful to avoid the following idiom:
280 .Bd -literal -offset indent
283 if ((p = realloc(p, nsize)) == NULL)
287 Do not adjust the variable describing how much memory has been allocated
288 until it is known that the allocation has been successful.
289 This can cause aberrant program behavior if the incorrect size value is used.
290 In most cases, the above example will also leak memory.
291 As stated earlier, a return value of
293 indicates that the old object still remains allocated.
294 Better code looks like this:
295 .Bd -literal -offset indent
298 if ((p2 = realloc(p, newsize)) == NULL) {
317 detect an error, a message will be printed to file descriptor
319 and the process will dump core.
329 .Xr posix_memalign 3 ,
343 function first appeared in
355 implementation is based on the kernel's slab allocator (see
356 .Xr posix_memalign 3 Ap s
357 .Sx IMPLEMENTATION NOTES ) .