]>
Commit | Line | Data |
---|---|---|
5b2abdfb A |
1 | .\" Copyright (c) 1980, 1991, 1993 |
2 | .\" The Regents of the University of California. All rights reserved. | |
3 | .\" | |
4 | .\" This code is derived from software contributed to Berkeley by | |
5 | .\" the American National Standards Committee X3, on Information | |
6 | .\" Processing Systems. | |
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 | .\" 3. All advertising materials mentioning features or use of this software | |
17 | .\" must display the following acknowledgement: | |
18 | .\" This product includes software developed by the University of | |
19 | .\" California, Berkeley and its contributors. | |
20 | .\" 4. Neither the name of the University nor the names of its contributors | |
21 | .\" may be used to endorse or promote products derived from this software | |
22 | .\" without specific prior written permission. | |
23 | .\" | |
24 | .\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND | |
25 | .\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE | |
26 | .\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE | |
27 | .\" ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE | |
28 | .\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL | |
29 | .\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS | |
30 | .\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) | |
31 | .\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT | |
32 | .\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY | |
33 | .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF | |
34 | .\" SUCH DAMAGE. | |
35 | .\" | |
36 | .\" @(#)malloc.3 8.1 (Berkeley) 6/4/93 | |
37 | .\" $FreeBSD: src/lib/libc/stdlib/malloc.3,v 1.49 2001/11/05 00:39:27 dd Exp $ | |
38 | .\" | |
39 | .Dd August 27, 1996 | |
40 | .Dt MALLOC 3 | |
41 | .Os | |
42 | .Sh NAME | |
43 | .Nm malloc , calloc , realloc , free , reallocf | |
44 | .Nd general purpose memory allocation functions | |
45 | .Sh LIBRARY | |
46 | .Lb libc | |
47 | .Sh SYNOPSIS | |
48 | .In stdlib.h | |
49 | .Ft void * | |
50 | .Fn malloc "size_t size" | |
51 | .Ft void * | |
52 | .Fn calloc "size_t number" "size_t size" | |
53 | .Ft void * | |
54 | .Fn realloc "void *ptr" "size_t size" | |
55 | .Ft void * | |
56 | .Fn reallocf "void *ptr" "size_t size" | |
57 | .Ft void | |
58 | .Fn free "void *ptr" | |
59 | .Ft char * | |
60 | .Va _malloc_options | |
61 | .Ft void | |
62 | .Fn \*(lp*_malloc_message\*(rp "char *p1" "char *p2" "char *p3" "char *p4" | |
63 | .Sh DESCRIPTION | |
64 | The | |
65 | .Fn malloc | |
66 | function allocates | |
67 | .Fa size | |
68 | bytes of memory. | |
69 | The allocated space is suitably aligned (after possible pointer coercion) | |
70 | for storage of any type of object. | |
71 | If the space is at least | |
72 | .Em pagesize | |
73 | bytes in length (see | |
74 | .Xr getpagesize 3 ) , | |
75 | the returned memory will be page boundary aligned as well. | |
76 | If | |
77 | .Fn malloc | |
78 | fails, a | |
79 | .Dv NULL | |
80 | pointer is returned. | |
81 | .Pp | |
82 | Note that | |
83 | .Fn malloc | |
84 | does | |
85 | .Em NOT | |
86 | normally initialize the returned memory to zero bytes. | |
87 | .Pp | |
88 | The | |
89 | .Fn calloc | |
90 | function allocates space for | |
91 | .Fa number | |
92 | objects, | |
93 | each | |
94 | .Fa size | |
95 | bytes in length. | |
96 | The result is identical to calling | |
97 | .Fn malloc | |
98 | with an argument of | |
99 | .Dq "number * size" , | |
100 | with the exception that the allocated memory is explicitly initialized | |
101 | to zero bytes. | |
102 | .Pp | |
103 | The | |
104 | .Fn realloc | |
105 | function changes the size of the previously allocated memory referenced by | |
106 | .Fa ptr | |
107 | to | |
108 | .Fa size | |
109 | bytes. | |
110 | The contents of the memory are unchanged up to the lesser of the new and | |
111 | old sizes. | |
112 | If the new size is larger, | |
113 | the value of the newly allocated portion of the memory is undefined. | |
114 | If the requested memory cannot be allocated, | |
115 | .Dv NULL | |
116 | is returned and | |
117 | the memory referenced by | |
118 | .Fa ptr | |
119 | is valid and unchanged. | |
120 | If | |
121 | .Fa ptr | |
122 | is | |
123 | .Dv NULL , | |
124 | the | |
125 | .Fn realloc | |
126 | function behaves identically to | |
127 | .Fn malloc | |
128 | for the specified size. | |
129 | .Pp | |
130 | The | |
131 | .Fn reallocf | |
132 | function call is identical to the realloc function call, except that it | |
133 | will free the passed pointer when the requested memory cannot be allocated. | |
134 | This is a | |
135 | .Fx | |
136 | specific API designed to ease the problems with traditional coding styles | |
137 | for realloc causing memory leaks in libraries. | |
138 | .Pp | |
139 | The | |
140 | .Fn free | |
141 | function causes the allocated memory referenced by | |
142 | .Fa ptr | |
143 | to be made available for future allocations. | |
144 | If | |
145 | .Fa ptr | |
146 | is | |
147 | .Dv NULL , | |
148 | no action occurs. | |
149 | .Sh TUNING | |
150 | Once, when the first call is made to one of these memory allocation | |
151 | routines, various flags will be set or reset, which affect the | |
152 | workings of this allocation implementation. | |
153 | .Pp | |
154 | The ``name'' of the file referenced by the symbolic link named | |
155 | .Pa /etc/malloc.conf , | |
156 | the value of the environment variable | |
157 | .Ev MALLOC_OPTIONS , | |
158 | and the string pointed to by the global variable | |
159 | .Va _malloc_options | |
160 | will be interpreted, in that order, character by character as flags. | |
161 | .Pp | |
162 | Most flags are single letters, | |
163 | where uppercase indicates that the behavior is set, or on, | |
164 | and lowercase means that the behavior is not set, or off. | |
165 | .Bl -tag -width indent | |
166 | .It A | |
167 | All warnings (except for the warning about unknown | |
168 | flags being set) become fatal. | |
169 | The process will call | |
170 | .Xr abort 3 | |
171 | in these cases. | |
172 | .It J | |
173 | Each byte of new memory allocated by | |
174 | .Fn malloc , | |
175 | .Fn realloc | |
176 | or | |
177 | .Fn reallocf | |
178 | as well as all memory returned by | |
179 | .Fn free , | |
180 | .Fn realloc | |
181 | or | |
182 | .Fn reallocf | |
183 | will be initialized to 0xd0. | |
184 | This options also sets the | |
185 | .Dq R | |
186 | option. | |
187 | This is intended for debugging and will impact performance negatively. | |
188 | .It H | |
189 | Pass a hint to the kernel about pages unused by the allocation functions. | |
190 | This will help performance if the system is paging excessively. This | |
191 | option is off by default. | |
192 | .It R | |
193 | Causes the | |
194 | .Fn realloc | |
195 | and | |
196 | .Fn reallocf | |
197 | functions to always reallocate memory even if the initial allocation was | |
198 | sufficiently large. | |
199 | This can substantially aid in compacting memory. | |
200 | .It U | |
201 | Generate | |
202 | .Dq utrace | |
203 | entries for | |
204 | .Xr ktrace 1 , | |
205 | for all operations. | |
206 | Consult the source for details on this option. | |
207 | .It V | |
208 | Attempting to allocate zero bytes will return a | |
209 | .Dv NULL | |
210 | pointer instead of | |
211 | a valid pointer. | |
212 | (The default behavior is to make a minimal allocation and return a | |
213 | pointer to it.) | |
214 | This option is provided for System V compatibility. | |
215 | This option is incompatible with the | |
216 | .Dq X | |
217 | option. | |
218 | .It X | |
219 | Rather than return failure for any allocation function, | |
220 | display a diagnostic message on stderr and cause the program to drop | |
221 | core (using | |
222 | .Xr abort 3 ) . | |
223 | This option should be set at compile time by including the following in | |
224 | the source code: | |
225 | .Bd -literal -offset indent | |
226 | _malloc_options = "X"; | |
227 | .Ed | |
228 | .It Z | |
229 | This option implicitly sets the | |
230 | .Dq J | |
231 | and | |
232 | .Dq R | |
233 | options, and then zeros out the bytes that were requested. | |
234 | This is intended for debugging and will impact performance negatively. | |
235 | .It < | |
236 | Reduce the size of the cache by a factor of two. | |
237 | The default cache size is 16 pages. | |
238 | This option can be specified multiple times. | |
239 | .It > | |
240 | Double the size of the cache by a factor of two. | |
241 | The default cache size is 16 pages. | |
242 | This option can be specified multiple times. | |
243 | .El | |
244 | .Pp | |
245 | The | |
246 | .Dq J | |
247 | and | |
248 | .Dq Z | |
249 | options are intended for testing and debugging. | |
250 | An application which changes its behavior when these options are used | |
251 | is flawed. | |
252 | .Sh EXAMPLES | |
253 | To set a systemwide reduction of cache size, and to dump core whenever | |
254 | a problem occurs: | |
255 | .Pp | |
256 | .Bd -literal -offset indent | |
257 | ln -s 'A<' /etc/malloc.conf | |
258 | .Ed | |
259 | .Pp | |
260 | To specify in the source that a program does no return value checking | |
261 | on calls to these functions: | |
262 | .Bd -literal -offset indent | |
263 | _malloc_options = "X"; | |
264 | .Ed | |
265 | .Sh ENVIRONMENT | |
266 | The following environment variables affect the execution of the allocation | |
267 | functions: | |
268 | .Bl -tag -width ".Ev MALLOC_OPTIONS" | |
269 | .It Ev MALLOC_OPTIONS | |
270 | If the environment variable | |
271 | .Ev MALLOC_OPTIONS | |
272 | is set, the characters it contains will be interpreted as flags to the | |
273 | allocation functions. | |
274 | .El | |
275 | .Sh RETURN VALUES | |
276 | The | |
277 | .Fn malloc | |
278 | and | |
279 | .Fn calloc | |
280 | functions return a pointer to the allocated memory if successful; otherwise | |
281 | a | |
282 | .Dv NULL | |
283 | pointer is returned and | |
284 | .Va errno | |
285 | is set to | |
286 | .Er ENOMEM . | |
287 | .Pp | |
288 | The | |
289 | .Fn realloc | |
290 | and | |
291 | .Fn reallocf | |
292 | functions return a pointer, possibly identical to | |
293 | .Fa ptr , | |
294 | to the allocated memory | |
295 | if successful; otherwise a | |
296 | .Dv NULL | |
297 | pointer is returned, in which case the | |
298 | memory referenced by | |
299 | .Fa ptr | |
300 | is still available and intact. | |
301 | In the case of memory allocation failure, | |
302 | .Va errno | |
303 | is set to | |
304 | .Er ENOMEM . | |
305 | .Pp | |
306 | The | |
307 | .Fn free | |
308 | function returns no value. | |
309 | .Sh DEBUGGING MALLOC PROBLEMS | |
310 | The major difference between this implementation and other allocation | |
311 | implementations is that the free pages are not accessed unless allocated, | |
312 | and are aggressively returned to the kernel for reuse. | |
313 | .Bd -ragged -offset indent | |
314 | Most allocation implementations will store a data structure containing a | |
315 | linked list in the free chunks of memory, | |
316 | used to tie all the free memory together. | |
317 | That can be suboptimal, | |
318 | as every time the free-list is traversed, | |
319 | the otherwise unused, and likely paged out, | |
320 | pages are faulted into primary memory. | |
321 | On systems which are paging, | |
322 | this can result in a factor of five increase in the number of page-faults | |
323 | done by a process. | |
324 | .Ed | |
325 | .Pp | |
326 | A side effect of this architecture is that many minor transgressions on | |
327 | the interface which would traditionally not be detected are in fact | |
328 | detected. As a result, programs that have been running happily for | |
329 | years may suddenly start to complain loudly, when linked with this | |
330 | allocation implementation. | |
331 | .Pp | |
332 | The first and most important thing to do is to set the | |
333 | .Dq A | |
334 | option. | |
335 | This option forces a coredump (if possible) at the first sign of trouble, | |
336 | rather than the normal policy of trying to continue if at all possible. | |
337 | .Pp | |
338 | It is probably also a good idea to recompile the program with suitable | |
339 | options and symbols for debugger support. | |
340 | .Pp | |
341 | If the program starts to give unusual results, coredump or generally behave | |
342 | differently without emitting any of the messages listed in the next | |
343 | section, it is likely because it depends on the storage being filled with | |
344 | zero bytes. Try running it with | |
345 | .Dq Z | |
346 | option set; | |
347 | if that improves the situation, this diagnosis has been confirmed. | |
348 | If the program still misbehaves, | |
349 | the likely problem is accessing memory outside the allocated area, | |
350 | more likely after than before the allocated area. | |
351 | .Pp | |
352 | Alternatively, if the symptoms are not easy to reproduce, setting the | |
353 | .Dq J | |
354 | option may help provoke the problem. | |
355 | .Pp | |
356 | In truly difficult cases, the | |
357 | .Dq U | |
358 | option, if supported by the kernel, can provide a detailed trace of | |
359 | all calls made to these functions. | |
360 | .Pp | |
361 | Unfortunately this implementation does not provide much detail about | |
362 | the problems it detects, the performance impact for storing such information | |
363 | would be prohibitive. | |
364 | There are a number of allocation implementations available on the 'Net | |
365 | which focus on detecting and pinpointing problems by trading performance | |
366 | for extra sanity checks and detailed diagnostics. | |
367 | .Sh DIAGNOSTIC MESSAGES | |
368 | If | |
369 | .Fn malloc , | |
370 | .Fn calloc , | |
371 | .Fn realloc | |
372 | or | |
373 | .Fn free | |
374 | detect an error or warning condition, | |
375 | a message will be printed to file descriptor STDERR_FILENO. | |
376 | Errors will result in the process dumping core. | |
377 | If the | |
378 | .Dq A | |
379 | option is set, all warnings are treated as errors. | |
380 | .Pp | |
381 | The | |
382 | .Va _malloc_message | |
383 | variable allows the programmer to override the function which emits | |
384 | the text strings forming the errors and warnings if for some reason | |
385 | the stderr filedescriptor is not suitable for this. | |
386 | Please note that doing anything which tries to allocate memory in | |
387 | this function will assure death of the process. | |
388 | .Pp | |
389 | The following is a brief description of possible error messages and | |
390 | their meanings: | |
391 | .Pp | |
392 | .Bl -diag | |
393 | .It "(ES): mumble mumble mumble" | |
394 | The allocation functions were compiled with | |
395 | .Dq EXTRA_SANITY | |
396 | defined, and an error was found during the additional error checking. | |
397 | Consult the source code for further information. | |
398 | .It "mmap(2) failed, check limits" | |
399 | This most likely means that the system is dangerously overloaded or that | |
400 | the process' limits are incorrectly specified. | |
401 | .It "freelist is destroyed" | |
402 | The internal free-list has been corrupted. | |
403 | .It "out of memory" | |
404 | The | |
405 | .Dq X | |
406 | option was specified and an allocation of memory failed. | |
407 | .El | |
408 | .Pp | |
409 | The following is a brief description of possible warning messages and | |
410 | their meanings: | |
411 | .Bl -diag | |
412 | .It "chunk/page is already free" | |
413 | The process attempted to | |
414 | .Fn free | |
415 | memory which had already been freed. | |
416 | .It "junk pointer, ..." | |
417 | A pointer specified to one of the allocation functions points outside the | |
418 | bounds of the memory of which they are aware. | |
419 | .It "malloc() has never been called" | |
420 | No memory has been allocated, | |
421 | yet something is being freed or | |
422 | realloc'ed. | |
423 | .It "modified (chunk-/page-) pointer" | |
424 | The pointer passed to | |
425 | .Fn free | |
426 | or | |
427 | .Fn realloc | |
428 | has been modified. | |
429 | .It "pointer to wrong page" | |
430 | The pointer that | |
431 | .Fn free , | |
432 | .Fn realloc , | |
433 | or | |
434 | .Fn reallocf | |
435 | is trying to free does not reference a possible page. | |
436 | .It "recursive call" | |
437 | A process has attempted to call an allocation function recursively. | |
438 | This is not permitted. In particular, signal handlers should not | |
439 | attempt to allocate memory. | |
440 | .It "unknown char in MALLOC_OPTIONS" | |
441 | An unknown option was specified. | |
442 | Even with the | |
443 | .Dq A | |
444 | option set, this warning is still only a warning. | |
445 | .El | |
446 | .Sh SEE ALSO | |
447 | .Xr brk 2 , | |
448 | .Xr mmap 2 , | |
449 | .Xr alloca 3 , | |
450 | .Xr getpagesize 3 , | |
451 | .Xr memory 3 | |
452 | .Pa /usr/share/doc/papers/malloc.ascii.gz | |
453 | .Sh STANDARDS | |
454 | The | |
455 | .Fn malloc , | |
456 | .Fn calloc , | |
457 | .Fn realloc | |
458 | and | |
459 | .Fn free | |
460 | functions conform to | |
461 | .St -isoC . | |
462 | .Sh HISTORY | |
463 | The present allocation implementation started out as a filesystem for a | |
464 | drum attached to a 20bit binary challenged computer which was built | |
465 | with discrete germanium transistors. It has since graduated to | |
466 | handle primary storage rather than secondary. | |
467 | It first appeared in its new shape and ability in | |
468 | .Fx 2.2 . | |
469 | .Pp | |
470 | The | |
471 | .Xr reallocf 3 | |
472 | function first appeared in | |
473 | .Fx 3.0 . | |
474 | .Sh AUTHORS | |
475 | .An Poul-Henning Kamp Aq phk@FreeBSD.org | |
476 | .Sh BUGS | |
477 | The messages printed in case of problems provide no detail about the | |
478 | actual values. | |
479 | .Pp | |
480 | It can be argued that returning a | |
481 | .Dv NULL | |
482 | pointer when asked to | |
483 | allocate zero bytes is a silly response to a silly question. |