]> CyberLeo.Net >> Repos - FreeBSD/releng/9.0.git/blob - share/man/man9/malloc.9
Copy stable/9 to releng/9.0 as part of the FreeBSD 9.0-RELEASE release
[FreeBSD/releng/9.0.git] / share / man / man9 / malloc.9
1 .\"
2 .\" Copyright (c) 1996 The NetBSD Foundation, Inc.
3 .\" All rights reserved.
4 .\"
5 .\" This code is derived from software contributed to The NetBSD Foundation
6 .\" by Paul Kranenburg.
7 .\"
8 .\" Redistribution and use in source and binary forms, with or without
9 .\" modification, are permitted provided that the following conditions
10 .\" are met:
11 .\" 1. Redistributions of source code must retain the above copyright
12 .\"    notice, this list of conditions and the following disclaimer.
13 .\" 2. Redistributions in binary form must reproduce the above copyright
14 .\"    notice, this list of conditions and the following disclaimer in the
15 .\"    documentation and/or other materials provided with the distribution.
16 .\"
17 .\" THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
18 .\" ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
19 .\" TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
20 .\" PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE
21 .\" LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
22 .\" CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
23 .\" SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
24 .\" INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
25 .\" CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
26 .\" ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
27 .\" POSSIBILITY OF SUCH DAMAGE.
28 .\"
29 .\" $NetBSD: malloc.9,v 1.3 1996/11/11 00:05:11 lukem Exp $
30 .\" $FreeBSD$
31 .\"
32 .Dd October 23, 2008
33 .Dt MALLOC 9
34 .Os
35 .Sh NAME
36 .Nm malloc ,
37 .Nm free ,
38 .Nm realloc ,
39 .Nm reallocf ,
40 .Nm MALLOC_DEFINE ,
41 .Nm MALLOC_DECLARE
42 .Nd kernel memory management routines
43 .Sh SYNOPSIS
44 .In sys/types.h
45 .In sys/malloc.h
46 .Ft void *
47 .Fn malloc "unsigned long size" "struct malloc_type *type" "int flags"
48 .Ft void
49 .Fn free "void *addr" "struct malloc_type *type"
50 .Ft void *
51 .Fn realloc "void *addr" "unsigned long size" "struct malloc_type *type" "int flags"
52 .Ft void *
53 .Fn reallocf "void *addr" "unsigned long size" "struct malloc_type *type" "int flags"
54 .Fn MALLOC_DECLARE type
55 .In sys/param.h
56 .In sys/malloc.h
57 .In sys/kernel.h
58 .Fn MALLOC_DEFINE type shortdesc longdesc
59 .Sh DESCRIPTION
60 The
61 .Fn malloc
62 function allocates uninitialized memory in kernel address space for an
63 object whose size is specified by
64 .Fa size .
65 .Pp
66 The
67 .Fn free
68 function releases memory at address
69 .Fa addr
70 that was previously allocated by
71 .Fn malloc
72 for re-use.
73 The memory is not zeroed.
74 If
75 .Fa addr
76 is
77 .Dv NULL ,
78 then
79 .Fn free
80 does nothing.
81 .Pp
82 The
83 .Fn realloc
84 function changes the size of the previously allocated memory referenced by
85 .Fa addr
86 to
87 .Fa size
88 bytes.
89 The contents of the memory are unchanged up to the lesser of the new and
90 old sizes.
91 Note that the returned value may differ from
92 .Fa addr .
93 If the requested memory cannot be allocated,
94 .Dv NULL
95 is returned and the memory referenced by
96 .Fa addr
97 is valid and unchanged.
98 If
99 .Fa addr
100 is
101 .Dv NULL ,
102 the
103 .Fn realloc
104 function behaves identically to
105 .Fn malloc
106 for the specified size.
107 .Pp
108 The
109 .Fn reallocf
110 function is identical to
111 .Fn realloc
112 except that it
113 will free the passed pointer when the requested memory cannot be allocated.
114 .Pp
115 Unlike its standard C library counterpart
116 .Pq Xr malloc 3 ,
117 the kernel version takes two more arguments.
118 The
119 .Fa flags
120 argument further qualifies
121 .Fn malloc Ns 's
122 operational characteristics as follows:
123 .Bl -tag -width indent
124 .It Dv M_ZERO
125 Causes the allocated memory to be set to all zeros.
126 .It Dv M_NOWAIT
127 Causes
128 .Fn malloc ,
129 .Fn realloc ,
130 and
131 .Fn reallocf
132 to return
133 .Dv NULL
134 if the request cannot be immediately fulfilled due to resource shortage.
135 Note that
136 .Dv M_NOWAIT
137 is required when running in an interrupt context.
138 .It Dv M_WAITOK
139 Indicates that it is OK to wait for resources.
140 If the request cannot be immediately fulfilled, the current process is put
141 to sleep to wait for resources to be released by other processes.
142 The
143 .Fn malloc ,
144 .Fn realloc ,
145 and
146 .Fn reallocf
147 functions cannot return
148 .Dv NULL
149 if
150 .Dv M_WAITOK
151 is specified.
152 .It Dv M_USE_RESERVE
153 Indicates that the system can dig into its reserve in order to obtain the
154 requested memory.
155 This option used to be called
156 .Dv M_KERNEL
157 but has been renamed to something more obvious.
158 This option has been deprecated and is slowly being removed from the kernel,
159 and so should not be used with any new programming.
160 .El
161 .Pp
162 Exactly one of either
163 .Dv M_WAITOK
164 or
165 .Dv M_NOWAIT
166 must be specified.
167 .Pp
168 The
169 .Fa type
170 argument is used to perform statistics on memory usage, and for
171 basic sanity checks.
172 It can be used to identify multiple allocations.
173 The statistics can be examined by
174 .Sq vmstat -m .
175 .Pp
176 A
177 .Fa type
178 is defined using
179 .Vt "struct malloc_type"
180 via the
181 .Fn MALLOC_DECLARE
182 and
183 .Fn MALLOC_DEFINE
184 macros.
185 .Bd -literal -offset indent
186 /* sys/something/foo_extern.h */
187
188 MALLOC_DECLARE(M_FOOBUF);
189
190 /* sys/something/foo_main.c */
191
192 MALLOC_DEFINE(M_FOOBUF, "foobuffers", "Buffers to foo data into the ether");
193
194 /* sys/something/foo_subr.c */
195
196 \&...
197 buf = malloc(sizeof *buf, M_FOOBUF, M_NOWAIT);
198
199 .Ed
200 .Pp
201 In order to use
202 .Fn MALLOC_DEFINE ,
203 one must include
204 .In sys/param.h
205 (instead of
206 .In sys/types.h )
207 and
208 .In sys/kernel.h .
209 .Sh IMPLEMENTATION NOTES
210 The memory allocator allocates memory in chunks that have size a power
211 of two for requests up to the size of a page of memory.
212 For larger requests, one or more pages is allocated.
213 While it should not be relied upon, this information may be useful for
214 optimizing the efficiency of memory use.
215 .Pp
216 Programmers should be careful not to confuse the malloc flags
217 .Dv M_NOWAIT
218 and
219 .Dv M_WAITOK
220 with the
221 .Xr mbuf 9
222 flags
223 .Dv M_DONTWAIT
224 and
225 .Dv M_WAIT .
226 .Sh CONTEXT
227 .Fn malloc ,
228 .Fn realloc
229 and
230 .Fn reallocf
231 may not be called from fast interrupts handlers.
232 When called from threaded interrupts,
233 .Fa flags
234 must contain
235 .Dv M_NOWAIT .
236 .Pp
237 .Fn malloc ,
238 .Fn realloc
239 and
240 .Fn reallocf
241 may sleep when called with
242 .Dv M_WAITOK .
243 .Fn free
244 never sleeps.
245 .Pp
246 Any calls to
247 .Fn malloc
248 (even with
249 .Dv M_NOWAIT )
250 or
251 .Fn free
252 when holding a
253 .Xr vnode 9
254 interlock, will cause a LOR (Lock Order Reversal) due to the
255 intertwining of VM Objects and Vnodes.
256 .Sh RETURN VALUES
257 The
258 .Fn malloc ,
259 .Fn realloc ,
260 and
261 .Fn reallocf
262 functions return a kernel virtual address that is suitably aligned for
263 storage of any type of object, or
264 .Dv NULL
265 if the request could not be satisfied (implying that
266 .Dv M_NOWAIT
267 was set).
268 .Sh DIAGNOSTICS
269 A kernel compiled with the
270 .Dv INVARIANTS
271 configuration option attempts to detect memory corruption caused by
272 such things as writing outside the allocated area and imbalanced calls to the
273 .Fn malloc
274 and
275 .Fn free
276 functions.
277 Failing consistency checks will cause a panic or a system console
278 message.
279 .Sh SEE ALSO
280 .Xr vmstat 8 ,
281 .Xr contigmalloc 9 ,
282 .Xr memguard 9 ,
283 .Xr vnode 9