diff options
author | archie <archie@FreeBSD.org> | 2002-03-13 01:42:33 +0000 |
---|---|---|
committer | archie <archie@FreeBSD.org> | 2002-03-13 01:42:33 +0000 |
commit | 4ff830618672fdf2a2864c71864aea5adc8d03e8 (patch) | |
tree | 0df1490a2b1aa94853b37fed5acf74bb6a508a3e /share/man/man9/malloc.9 | |
parent | 7888fb830149b836a2f4563f392442e88ef59376 (diff) | |
download | FreeBSD-src-4ff830618672fdf2a2864c71864aea5adc8d03e8.zip FreeBSD-src-4ff830618672fdf2a2864c71864aea5adc8d03e8.tar.gz |
Add realloc() and reallocf(), and make free(NULL, ...) acceptable.
Reviewed by: alfred
Diffstat (limited to 'share/man/man9/malloc.9')
-rw-r--r-- | share/man/man9/malloc.9 | 85 |
1 files changed, 74 insertions, 11 deletions
diff --git a/share/man/man9/malloc.9 b/share/man/man9/malloc.9 index c748724..447d8cf 100644 --- a/share/man/man9/malloc.9 +++ b/share/man/man9/malloc.9 @@ -54,18 +54,63 @@ .Ft void .Fn free "void *addr" "struct malloc_type *type" .Fn FREE "void *addr" "struct malloc_type *type" +.Ft void * +.Fn realloc "void *addr" "unsigned long size" "struct malloc_type *type" "int flags" +.Ft void * +.Fn reallocf "void *addr" "unsigned long size" "struct malloc_type *type" "int flags" .Sh DESCRIPTION The .Fn malloc function allocates uninitialized memory in kernel address space for an object whose size is specified by .Fa size . +.Pp .Fn free releases memory at address .Fa addr that was previously allocated by .Fn malloc -for re-use. The memory is not zeroed. +for re-use. +The memory is not zeroed. +If +.Fa addr +is +.Dv NULL , +then +.Fn free +does nothing. +.Pp +The +.Fn realloc +function changes the size of the previously allocated memory referenced by +.Fa addr +to +.Fa size +bytes. +The contents of the memory are unchanged up to the lesser of the new and +old sizes. +Note that the returned value may differ from +.Fa addr . +If the requested memory cannot be allocated, +.Dv NULL +is returned and the memory referenced by +.Fa addr +is valid and unchanged. +If +.Fa addr +is +.Dv NULL , +the +.Fn realloc +function behaves identically to +.Fn malloc +for the specified size. +.Pp +The +.Fn reallocf +function call is identical to the realloc function call, except that it +will free the passed pointer when the requested memory cannot be allocated. +.Pp The .Fn MALLOC macro variant is functionally equivalent to @@ -92,26 +137,35 @@ operational characteristics as follows: Causes the allocated memory to be set to all zeros. .It Dv M_NOWAIT Causes -.Fn malloc +.Fn malloc , +.Fn realloc , +or +.Fn reallocf to return .Dv NULL if the request cannot be immediately fulfilled due to resource shortage. -Otherwise, -.Fn malloc -may call sleep to wait for resources to be released by other processes. +Otherwise, the current process may be put to sleep to wait for +resources to be released by other processes. If this flag is set, .Fn malloc will return .Dv NULL -rather then block. Note that +rather then block. +Note that .Dv M_WAITOK is defined to be 0, meaning that blocking operation is the default. +Also note that +.Dv M_NOWAIT +is required when running in an interrupt context. .It Dv M_WAITOK Indicates that it is Ok to wait for resources. It is unconveniently defined as 0 so care should be taken never to compare against this value directly or try to AND it as a flag. The default operation is to block until the memory allocation succeeds. -.Fn malloc +.Fn malloc , +.Fn realloc , +and +.Fn reallocf can only return .Dv NULL if @@ -157,13 +211,22 @@ MALLOC(buf, struct foo_buf *, sizeof *buf, M_FOOBUF, M_NOWAIT); .Ed .Sh RETURN VALUES -.Fn malloc -returns a kernel virtual address that is suitably aligned for storage of +.Fn malloc , +.Fn realloc , +and +.Fn reallocf +return a kernel virtual address that is suitably aligned for storage of any type of object, or .Dv NULL -if the request could not be satisfied and +if the request could not be satisfied (implying that .Dv M_NOWAIT -was set. +was set). +.Sh IMPLEMENTATION NOTES +The memory allocator allocates memory in chunks that have size a power +of two for requests up to the size of a page of memory. +For larger requests, one or more pages is allocated. +While it should not be relied upon, this information may be useful for +optimizing the efficiency of memory use. .Sh SEE ALSO .Xr vmstat 8 .Sh DIAGNOSTICS |