*nix Documentation Project
·  Home
 +   man pages
·  Linux HOWTOs
·  FreeBSD Tips
·  *niX Forums

  man pages->NetBSD man pages -> malloc (9)              



NAME    [Toc]    [Back]

     malloc, free - kernel memory allocator

SYNOPSIS    [Toc]    [Back]

     void *
     malloc(unsigned long size, int type, int flags);

     MALLOC(space, cast, unsigned long size, int type, int flags);

     unsigned long
     malloc_roundup(unsigned long size);

     free(void *addr, int type);

     FREE(void *addr, int type);

DESCRIPTION    [Toc]    [Back]

     The malloc() function allocates uninitialized memory in kernel address
     space for an object whose size is specified by size.  malloc_roundup()
     returns the actual size of the allocation unit for the given value.
     free() releases memory at address addr that was previously allocated by
     malloc() for re-use.  The MALLOC() macro variant is functionally equivalent

           (space) = (cast)malloc((u_long)(size), type, flags)

     and the FREE() macro variant is equivalent to

           free((caddr_t)(addr), type)

     Unlike its standard C library counterpart (malloc(3)), the kernel version
     takes two more arguments.

     The flags argument further qualifies malloc() operational characteristics
     as follows:

           M_NOWAIT   Causes malloc() to return NULL if the request cannot be
                      immediately fulfilled due to resource shortage.  If this
                      flag is not set (see M_WAITOK), malloc() will never
                      return NULL.

           M_WAITOK   By default, malloc() may call sleep(9) to wait for
                      resources to be released by other processes, and this
                      flag represents this behaviour.  Note that M_WAITOK is
                      conveniently defined to be 0, and hence may be or'ed
                      into the flags argument to indicate that it's ok to wait
                      for resources.

           M_ZERO     Causes the allocated memory to be set to all zeros.

           M_CANFAIL  Changes behaviour for M_WAITOK case - if the requested
                      memory size is bigger than malloc() can ever allocate,
                      return failure, rather than calling panic(9).  This is
                      different to M_NOWAIT, since the call can still wait for

                      Rather than depending on M_CANFAIL, kernel code should
                      do proper bound checking itself.  This flag should only
                      be used in cases where this is not feasible.  Since it
                      can hide real kernel bugs, it's usage is strongly

     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.  The following types are currently defined:

           M_FREE          Should be on free list.
           M_MBUF          Mbuf memory.
           M_DEVBUF        Device driver memory.
           M_SOCKET        Socket structure.
           M_PCB           Protocol control block.
           M_RTABLE        Routing tables.
           M_HTABLE        IMP host tables.
           M_FTABLE        Fragment reassembly header.
           M_ZOMBIE        Zombie proc status
           M_IFADDR        Interface address.
           M_SOOPTS        Socket options.
           M_SONAME        Socket name.
           M_NAMEI         Namei path name buffer.
           M_GPROF         Kernel profiling buffer.
           M_IOCTLOPS      Ioctl data buffer.
           M_MAPMEM        Mapped memory descriptors.
           M_CRED          Credentials.
           M_PGRP          Process group header.
           M_SESSION       Session header.
           M_IOV           Large iov's.
           M_MOUNT         Vfs mount struct.
           M_FHANDLE       Network file handle.
           M_NFSREQ        NFS request header.
           M_NFSMNT        NFS mount structure.
           M_NFSNODE       NFS vnode private part.
           M_VNODE         Dynamically allocated vnodes.
           M_CACHE         Dynamically allocated cache entries.
           M_DQUOT         UFS quota entries.
           M_UFSMNT        UFS mount structure.
           M_SHM           SVID compatible shared memory segments.
           M_VMMAP         VM map structures.
           M_VMMAPENT      VM map entry structures.
           M_VMOBJ         VM object structure.
           M_VMOBJHASH     VM object hash structure.
           M_VMPMAP        VM pmap.
           M_VMPVENT       VM phys-virt mapping entry.
           M_VMPAGER       XXX: VM pager struct.
           M_VMPGDATA      XXX: VM pager private data.
           M_FILE          Open file structure.
           M_FILEDESC      Open file descriptor table.
           M_LOCKF         Byte-range locking structures.
           M_PROC          Proc structures.
           M_SUBPROC       Proc sub-structures.
           M_SEGMENT       Segment for LFS.
           M_LFSNODE       LFS vnode private part.
           M_FFSNODE       FFS vnode private part.
           M_MFSNODE       MFS vnode private part.
           M_NQLEASE       Nqnfs lease.
           M_NQMHOST       Nqnfs host address table.
           M_NETADDR       Export host address structure.
           M_NFSSVC        Nfs server structure.
           M_NFSUID        Nfs uid mapping structure.
           M_NFSD          Nfs server daemon structure.
           M_IPMOPTS       Internet multicast options.
           M_IPMADDR       Internet multicast address.
           M_IFMADDR       Link-level multicast address.
           M_MRTABLE       Multicast routing tables.
           M_ISOFSMNT      ISOFS mount structure.
           M_ISOFSNODE     ISOFS vnode private part.
           M_MSDOSFSMNT    MSDOS FS mount structure.
           M_MSDOSFSFAT    MSDOS FS fat table.
           M_MSDOSFSNODE   MSDOS FS vnode private part.
           M_TTYS          Allocated tty structures.
           M_EXEC          Argument lists  other mem used by exec.
           M_MISCFSMNT     Miscfs mount structures.
           M_MISCFSNODE    Miscfs vnode private part.
           M_ADOSFSMNT     Adosfs mount structures.
           M_ADOSFSNODE    Adosfs vnode private part.
           M_ANODE         Adosfs anode structures and tables.
           M_IPQ           IP packet queue entry.
           M_AFS           Andrew File System.
           M_ADOSFSBITMAP  Adosfs bitmap.
           M_NFSSRVDESC    NFS server descriptor.
           M_NFSDIROFF     NFS directory cookies.
           M_NFSBIGFH      NFS big filehandle.
           M_EXT2FSNODE    EXT2FS vnode private part.
           M_VMSWAP        VM swap structures.
           M_VMPAGE        VM page structures.
           M_VMPBUCKET     VM page buckets.
           M_UVMAMAP       UVM amap and related structs.
           M_UVMAOBJ       UVM aobj and related structs.
           M_TEMP          Misc temporary data buffers.
           M_DMAMAP        bus_dma(9) structures.
           M_IPFLOW        IP flow entries.
           M_USB           USB general.
           M_USBDEV        USB permanent.
           M_POOL          Memory pool(9) structures.
           M_CODA          Coda file system structures and tables.
           M_FILECOREMNT   Filecore FS mount structures.
           M_FILECORENODE  Filecore FS vnode private part.
           M_RAIDFRAME     RAIDframe structures and IO buffers.
           M_USBHC         USB host controller.
           M_SECA          security associations, key management.
           M_IP6OPT        IPv6 options.
           M_IP6NDP        IPv6 Neighbour Discovery.
           M_NTFS          Windows NT file system structures.
           M_PAGEDEP       File page dependencies.
           M_INODEDEP      Inode dependencies.
           M_NEWBLK        New block allocation.
           M_BMSAFEMAP     Block or frag allocated from cyl group map.
           M_ALLOCDIRECT   Block or frag dependency for an inode.
           M_INDIRDEP      Indirect block dependencies.
           M_ALLOCINDIR    Block dependency for an indirect block.
           M_FREEFRAG      Previously used frag for an inode.
           M_FREEBLKS      Blocks freed from an inode.
           M_FREEFILE      Inode deallocated.
           M_DIRADD        New directory entry.
           M_MKDIR         New directory.
           M_DIRREM        Directory entry deleted.
           M_IP6RR         IPv6 Router Renumbering Prefix.
           M_RR_ADDR       IPv6 Router Renumbering Ifid.
           M_SOFTINTR      Softinterrupt structures.
           M_EMULDATA      Per-process emulation data.
           M_1394CTL       IEEE 1394 control structures.
           M_1394DATA      IEEE 1394 data buffers.
           M_PIPE          Pipe structures.
           M_AGP           AGP memory.
           M_PROP          Kernel properties structures.
           M_NEWDIRBLK     Unclaimed new directory block (softdeps).
           M_SMBIOD        SMB network id daemon.
           M_SMBCONN       SMB connection id.
           M_SMBRQ         SMB request.
           M_SMBDATA       Miscellaneous SMB data.
           M_SMBSTR        SMB string data.
           M_SMBTEMP       Temporary SMB data.
           M_ICONV         ICONV data.
           M_SMBNODE       SMBFS node.
           M_SMBNODENAME   SMBFS node name.
           M_SMBFSDATA     SMBFS data.
           M_SMBFSHASH     SMBFS hash table.
           M_SA            Scheduler activations data structures

     Statistics based on the type argument is maintained only if the kernel
     option KMEMSTATS is used when compiling the kernel (the default in
     current NetBSD kernels) and can be examined by using `vmstat -m'.

RETURN VALUES    [Toc]    [Back]

     malloc() returns a kernel virtual address that is suitably aligned for
     storage of any type of object.

DIAGNOSTICS    [Toc]    [Back]

     A kernel compiled with the DIAGNOSTIC configuration option attempts to
     detect memory corruption caused by such things as writing outside the
     allocated area and imbalanced calls to the malloc() and free() functions.
     Failing consistency checks will cause a panic or a system console message:

           +o   panic: ``malloc - bogus type''
           +o   panic: ``malloc: out of space in kmem_map''
           +o   panic: ``malloc: allocation too large''
           +o   panic: ``malloc: wrong bucket''
           +o   panic: ``malloc: lost data''
           +o   panic: ``free: unaligned addr''
           +o   panic: ``free: duplicated free''
           +o   panic: ``free: multiple frees''
           +o   panic: ``init: minbucket too small/struct freelist too big''
           +o   ``multiply freed item <addr>''
           +o   ``Data modified on freelist: <data object description>''

SEE ALSO    [Toc]    [Back]


BSD                            December 4, 2001                            BSD
[ Back ]
 Similar pages
Name OS Title
alloca NetBSD memory allocator
alloca FreeBSD memory allocator
alloca OpenBSD memory allocator
alloca Linux memory allocator
arealloc Tru64 arena memory allocator
free Tru64 Provide a memory allocator
amallinfo Tru64 arena memory allocator
mallinfo Tru64 Provide a memory allocator
amalloc Tru64 arena memory allocator
malloc IRIX main memory allocator
Copyright © 2004-2005 DeniX Solutions SRL
newsletter delivery service