Solaris 模块调试器指南

mdb_alloc()mdb_zalloc()mdb_free()

void *mdb_alloc(size_t size, uint_t flags);

void *mdb_zalloc(size_t size, uint_t flags);

void mdb_free(void *buf, size_t size);

mdb_alloc() 分配 size 字节的调试器内存,并返回指向已分配内存的指针。已分配的内存至少是双字对齐的,以便它可以保存任何 C 数据结构。 不能采用更高的对齐方式。flags 参数应该是以下一个或多个值的按位 OR

UM_NOSLEEP

如果完成请求所需的足够内存不是立即可用,则返回 NULL 以指示失败。调用方必须检查 NULL 并相应处理此情况。

UM_SLEEP

如果完成请求所需的足够内存不是立即可用,则在可以完成请求之前一直休眠。因此,UM_SLEEP 分配一定会成功。调用方无需检查 NULL 返回值。

UM_GC

在此调试器命令结束时,自动对分配进行垃圾收集。调用方随后不应在此块上调用 mdb_free(),因为调试器将自动执行取消分配操作。 从 dcmd 内进行的所有内存分配都必须使用 UM_GC,以便在用户中断 dcmd 的情况下,调试器可以对内存进行垃圾收集。

mdb_zalloc()mdb_alloc() 类似,但是将已分配内存返回给调用方之前用零填充该内存。对于 mdb_alloc() 所返回内存的初始内容没有任何保证。mdb_free() 用于释放以前分配的内存(除非为它分配了 UM_GC)。 缓冲区地址和大小必须与原始分配完全匹配。通过 mdb_free() 仅释放部分分配是不合法的。多次释放分配也是不合法的。零字节分配始终返回 NULL;释放大小为零的 NULL 指针总是会成功。