#include <sys/types.h> #include <sys/errno.h> #include <sys/malloc.h>
caddr_t xmalloc (size, align, heap) int size; int align; caddr_t heap;
|size||Specifies the number of bytes to allocate.|
|align||Specifies the alignment characteristics for the allocated memory.|
|heap||Specifies the address of the heap from which the memory is to be allocated.|
The xmalloc kernel service allocates an area of memory out of the heap specified by the heap parameter. This area is the number of bytes in length specified by the size parameter and is aligned on the byte boundary specified by the align parameter. The align parameter is actually the log base 2 of the desired address boundary. For example, an align value of 4 requests that the allocated area be aligned on a 2^4 (16) byte boundary.
Two heaps are provided in the kernel segment for use by kernel extensions. The kernel extensions should use the kernel_heap value when allocating memory that is not pinned. They should also use the pinned_heap value when allocating memory that is pinned. In particular, the pinned_heap value should be specified when allocating memory that is to be always pinned or pinned for long periods of time. The memory is pinned upon successful return from the xmalloc kernel service. When allocating memory that can be pageable (or only pinned for short periods of time), the kernel_heap value should be specified. The pin and unpin kernel services should be used to pin and unpin memory from the heap when required.
Kernel extensions can use these services to allocate memory out of the kernel heaps. For example, the xmalloc (128,3,kernel_heap) kernel service allocates a 128-byte double word aligned area out of the kernel heap.
A kernel extension must use the xmfree kernel service to free the allocated memory. If it does not, subsequent allocations eventually are unsuccessful.
The xmalloc kernel service has two compatibility interfaces: malloc and palloc.
The xmalloc kernel service can be called from the process environment only.
Upon successful completion, the xmalloc kernel service returns the address of the allocated area. A null pointer is returned under the following circumstances:
The xmalloc kernel service is part of Base Operating System (BOS) Runtime.
The following additional interfaces to the xmalloc kernel service are provided:
The xmfree kernel service.
Memory Kernel Services in AIX Kernel Extensions and Device Support Programming Concepts.