pub rec Allocator;
与后端无关的内存分配器接口
ctx:传递给回调的不透明上下文(opaque context)。 fn_allocate:分配函数 (ctx, size, align) -> ptr(内存耗尽 OOM 时返回 nil)。 fn_reallocate:重新分配函数 (ctx, p, old_size, new_size, align) -> ptr(OOM 时返回 nil)。 fn_deallocate:释放函数 (ctx, p, size, align) -> i64(成功时返回 0,失败时返回负数错误码)。
pub fun allocate_raw(a: *Allocator, size: usize, align: usize) R.Result[ptr, *u8];
使用此分配器分配原始字节
a:用于此分配的分配器。 size:字节数(若为 0 则返回 nil)。 align:请求的对齐方式(以字节为单位)。 返回值:指向已分配内存的指针,或在 OOM 时返回错误
pub fun reallocate_raw(a: *Allocator, p: ptr, old_size: usize, new_size: usize, align: usize) R.Result[ptr, *u8];
尽可能就地重新分配内存,否则可能会返回一个新的指针
a:用于此操作的分配器 p:现有的指针(或为 nil 以分配新内存) old_size:先前的字节大小 new_size:期望的字节大小(若为 0 则释放分配) align:对齐方式(以字节为单位) 返回值:指向重新分配后内存的指针(如果就地分配则与 p 相同),或在 OOM 时返回错误
pub fun deallocate_raw(a: *Allocator, p: ptr, size: usize, align: usize) i64;
释放先前由 allocate_raw 或 reallocate_raw 返回的内存
a:用于此操作的分配器 p:先前由 allocate_raw 或 reallocate_raw 返回的指针 size:已分配的字节大小 align:对齐方式(以字节为单位) 返回值:成功时为 0,或负数的错误码
pub fun allocate[T](a: *Allocator, count: usize) R.Result[*T, *u8];
分配 T 类型的 count 个元素
a:用于此分配的分配器 count:要分配的元素数量 返回值:指向已分配内存的指针,或者在 OOM 或溢出时返回错误(当 count == 0 时为 nil)
pub fun zallocate[T](a: *Allocator, count: usize) R.Result[*T, *u8];
分配 T 类型的 count 个元素并将其清零初始化
a:用于此分配的分配器 count:要分配的元素数量 返回值:指向已分配并清零初始化内存的指针,或在 OOM 或溢出时返回错误(当 count == 0 时为 nil)
pub fun reallocate[T](a: *Allocator, p: *T, old_count: usize, new_count: usize) R.Result[*T, *u8];
重新分配 T 元素的内存
a:用于此操作的分配器 p:现有指针 old_count:先前的元素数量 new_count:期望的元素数量(若为 0 则释放) 返回值:指向重新分配后内存的指针(如果就地分配则与 p 相同),或在 OOM 或溢出时返回错误(当 new_count == 0 时为 nil)
pub fun deallocate[T](a: *Allocator, p: *T, count: usize) R.Result[bool, *u8];
释放先前由 alloc/zalloc 为 count 个元素返回的内存。
a:用于此操作的分配器 p:由 alloc/zalloc 返回的指针(可以为 nil) count:要释放的元素数量 返回值:成功时返回 ok(true)(包括 nil 指针 / count == 0 的空操作),或者在分配器状态非零时返回 err,呼应 allocate/reallocate。