xmalloc 内核服务

用途

分配内存。

语法

#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;

参数

描述
大小 指定要分配的字节数。
对齐 指定已分配内存的对齐特征。
堆 (heap) 指定要从其中分配内存的堆的地址。

描述

克马洛克 内核服务将从 参数指定的堆中分配内存区域。 此区域是由 大小 参数指定的长度中的字节数,并且在由 对齐 参数指定的字节边界上对齐。 对齐 参数实际上是所需地址边界的日志底数 2。 例如,如果 对齐 值为 4 ,那么 4 在 2 ^ 4 (16) 字节边界上对齐分配的区域。

有多个由内核提供的堆供内核扩展使用。 两个主内核堆是 kernel_heap平内德堆。 在分配未置顶的内存时,内核扩展应使用 kernel_heap 值,在分配应始终置顶或置顶很长时间的内存时,应使用 平内德堆 值。 从 平内德堆 堆进行分配时, 克马洛克 内核服务将在成功返回之前锁定内存。 取消锁定 内核服务应该用于锁定和取消锁定 kernel_heap 堆中的内存,而内存应该仅在有限的时间内被锁定。 必须先取消锁定 kernel_heap 堆中的内存,然后才能将其释放。 不应将 平内德堆 堆中的内存取消锁定。

kernel_heap 堆指向以下其中一个堆: kernel_heap_4K_64Kkernel_heap_16M平内德堆 堆指向以下其中一个堆: pinned_heap_4K_64Kpinned_heap_16M。 每个目标堆在其背后的页面大小方面都不同。 kernel_heap_4K_64Kpinned_heap_4K_64K 将由中型 (64 KB) 或常规 (4 KB) 页支持,具体取决于机器所支持的页大小。 如果启用了大页堆,那么 kernel_heap_16Mpinned_heap_16M 将返回大页支持的内存。 如果未启用大型页面堆,那么 kernel_heap平内德堆 将指向缺省堆。 如果后备页面的大小不重要,请使用 kernel_heap 值和 平内德堆 值。 它们将指向您希望使用的堆。 有关大页面堆支持的更多信息,请参阅 弗莫

内核扩展可以使用这些服务来从内核堆中分配内存。 例如, xmalloc (1283kernel_heap) 内核服务从内核堆中分配 128 字节的双字对齐区域。

内核扩展必须使用 Xmfree 内核服务来释放已分配的内存。 如果它不存在,那么后续分配最终将不成功。

克马洛克 内核服务具有两个兼容性接口: 马洛克帕洛克

提供了以下到 克马洛克 内核服务的其他接口:

  • 马洛克 (大小) 等效于 克马洛克 (大小0kernel_heap)。
  • 帕洛克 (大小对齐) 等价于 克马洛克 (大小对齐kernel_heap)。

执行环境

仅可从 流程环境 调用 克马洛克 内核服务。

返回值

成功完成后, 克马洛克 内核服务将返回已分配区域的地址。 在以下情况下,将返回空指针:

  • 无法分配请求的内存。
  • 尚未对堆进行初始化以进行内存分配。