| MALLOC(9) | Kernel Developer's Manual | MALLOC(9) |
malloc,
mallocarray, free —
kernel memory allocator
#include
<sys/types.h>
#include <sys/malloc.h>
void *
malloc(size_t
size, int type,
int flags);
void *
mallocarray(size_t
nmemb, size_t size,
int type,
int flags);
void
free(void
*addr, int type,
size_t size);
The
malloc()
function allocates uninitialized memory in kernel address space for an
object whose size is specified by size.
The
mallocarray()
function is the same as malloc(), but allocates
space for an array of nmemb objects and checks for
arithmetic overflow.
The
free()
function releases memory at address addr that was
previously allocated by malloc() or
mallocarray() for re-use. The same object size
originally provided to malloc() should be specified
by size, because free() will
operate faster knowing this. If tracking the size is difficult, specify
size as 0. If addr is a null
pointer, no action occurs.
The flags argument affects the
operational characteristics of
malloc()
and mallocarray() as follows:
M_WAITOKmalloc() may
call sleep to wait for resources to be released by other processes.M_NOWAITmalloc() to return
NULL if the request cannot be immediately
fulfilled due to resource shortage.M_CANFAILM_WAITOK case, if not enough memory is
available, return NULL instead of calling
panic(9). If
mallocarray() detects an overflow or
malloc() detects an excessive allocation, return
NULL instead of calling
panic(9).M_ZEROOne of M_NOWAIT or
M_WAITOK must be specified via the
flags argument.
The type argument broadly identifies the
kernel subsystem for which the allocated memory was needed, and is commonly
used to maintain statistics about kernel memory usage. These statistics can
be examined using vmstat(8) or
systat(1) if either of the kernel
options(4)
KMEMSTATS or DEBUG are
enabled.
The following types are currently defined:
M_DEVBUFM_PCBM_RTABLEM_PFM_IFADDRM_IFGROUPM_SYSCTLM_COUNTERSM_IOCTLOPSM_IOVM_MOUNTM_NFSREQM_NFSMNTM_LOGM_VNODEM_DQUOTM_UFSMNTM_SHMM_VMMAPM_SEMM_DIRHASHM_ACPIM_VMPMAPM_FILEDESCM_SIGIOM_PROCM_SUBPROCM_MFSNODEM_NETADDRM_NFSSVCM_NFSDM_IPMOPTSM_IPMADDRM_IFMADDRM_MRTABLEM_ISOFSMNTM_ISOFSNODEM_MSDOSFSMNTM_MSDOSFSFATM_MSDOSFSNODEM_TTYSM_EXECM_MISCFSMNTM_FUSEFSM_PINSYSCALLM_PFKEYM_TDBM_XDATAM_PAGEDEPM_INODEDEPM_NEWBLKM_INDIRDEPM_VMSWAPM_UVMAMAPM_UVMAOBJM_USBM_USBDEVM_USBHCM_WITNESSM_MEMDESCM_CRYPTO_DATAM_CREDENTIALSM_IP6OPTM_IP6NDPM_TEMPM_NTFSMNTM_NTFSNTNODEM_NTFSFNODEM_NTFSDIRM_NTFSNTHASHM_NTFSNTVATTRM_NTFSRDATAM_NTFSDECOMPM_NTFSRUNM_KEVENTM_SYNCACHEM_UDFMOUNTM_UDFFENTRYM_UDFFIDM_AGPM_DRMmalloc() and
mallocarray() can be called during autoconf, from
process context, or from interrupt context if
M_NOWAIT is passed via flags.
They can't be called from interrupt context if
M_WAITOK is passed via
flags.
free() can be called during autoconf, from
process context, or from interrupt context.
malloc() and
mallocarray() return a kernel virtual address that
is suitably aligned for storage of any type of object.
A kernel compiled with the DIAGNOSTIC
configuration option attempts to detect memory corruption caused by such
things as writing outside the allocated area and unbalanced calls to
malloc() or mallocarray(),
and free(). Failing consistency checks will cause a
panic or a system console message:
| January 19, 2024 | openbsd |