xmalloc 内核服务
用途
分配内存。
语法
参数
| 项 | 描述 |
|---|---|
| 大小 | 指定要分配的字节数。 |
| 对齐 | 指定已分配内存的对齐特征。 |
| 堆 (heap) | 指定要从其中分配内存的堆的地址。 |
描述
克马洛克 内核服务将从 堆 参数指定的堆中分配内存区域。 此区域是由 大小 参数指定的长度中的字节数,并且在由 对齐 参数指定的字节边界上对齐。 对齐 参数实际上是所需地址边界的日志底数 2。 例如,如果 对齐 值为 4 ,那么 4 在 2 ^ 4 (16) 字节边界上对齐分配的区域。
有多个由内核提供的堆供内核扩展使用。 两个主内核堆是 kernel_heap 和 平内德堆。 在分配未置顶的内存时,内核扩展应使用 kernel_heap 值,在分配应始终置顶或置顶很长时间的内存时,应使用 平内德堆 值。 从 平内德堆 堆进行分配时, 克马洛克 内核服务将在成功返回之前锁定内存。 销 和 取消锁定 内核服务应该用于锁定和取消锁定 kernel_heap 堆中的内存,而内存应该仅在有限的时间内被锁定。 必须先取消锁定 kernel_heap 堆中的内存,然后才能将其释放。 不应将 平内德堆 堆中的内存取消锁定。
kernel_heap 堆指向以下其中一个堆: kernel_heap_4K_64K 和 kernel_heap_16M。 平内德堆 堆指向以下其中一个堆: pinned_heap_4K_64K 和 pinned_heap_16M。 每个目标堆在其背后的页面大小方面都不同。 kernel_heap_4K_64K 或 pinned_heap_4K_64K 将由中型 (64 KB) 或常规 (4 KB) 页支持,具体取决于机器所支持的页大小。 如果启用了大页堆,那么 kernel_heap_16M 或 pinned_heap_16M 将返回大页支持的内存。 如果未启用大型页面堆,那么 kernel_heap 或 平内德堆 将指向缺省堆。 如果后备页面的大小不重要,请使用 kernel_heap 值和 平内德堆 值。 它们将指向您希望使用的堆。 有关大页面堆支持的更多信息,请参阅 弗莫。
内核扩展可以使用这些服务来从内核堆中分配内存。 例如, xmalloc (128,3,kernel_heap) 内核服务从内核堆中分配 128 字节的双字对齐区域。
内核扩展必须使用 Xmfree 内核服务来释放已分配的内存。 如果它不存在,那么后续分配最终将不成功。
克马洛克 内核服务具有两个兼容性接口: 马洛克 和 帕洛克。
提供了以下到 克马洛克 内核服务的其他接口:
- 马洛克 (大小) 等效于 克马洛克 (大小, 0, kernel_heap)。
- 帕洛克 (大小, 对齐) 等价于 克马洛克 (大小, 对齐, kernel_heap)。
执行环境
仅可从 流程环境 调用 克马洛克 内核服务。
返回值
成功完成后, 克马洛克 内核服务将返回已分配区域的地址。 在以下情况下,将返回空指针:
- 无法分配请求的内存。
- 尚未对堆进行初始化以进行内存分配。