pub rec Chunk;
每个后备分配的头部
prev:链表中的前一个 chunk cap:数据容量(以字节为单位,数据跟在头部后面)
pub rec Arena;
采用分块增长的 bump 分配器状态
backing:用于 chunk 分配的分配器 buf:当前 chunk 数据指针(缓存以实现快速路径) cap:当前 chunk 数据容量(已缓存) off:当前 chunk 内的当前分配偏移量 last_off:最近一次分配的偏移量(用于回滚/调整大小) last_size:最近一次分配的大小(用于回滚/调整大小) chunk:当前 chunk 头部 first_chunk:第一个 chunk(用于重置/销毁) default_cap:增长时的最小 chunk 容量
pub fun init(ar: *Arena, backing: *allocator.Allocator, cap: usize) O.Option[*u8];
使用后备分配器和可选的初始容量初始化一个 Arena
ar:要初始化的 Arena backing:用于提供后备存储的分配器 cap:初始 chunk 容量(以字节为单位,0 表示首次使用时延迟分配) ret:成功时为 none,失败时为错误字符串
pub fun dnit(ar: *Arena) i64;
释放所有 chunk 并将 Arena 状态清零
ar:要销毁的 Arena ret:如果所有后备释放都成功则为 0,或返回第一个负的错误码
pub fun make(a: *allocator.Allocator, ar: *Arena) O.Option[*u8];
连接一个由该 Arena 支持的 Allocator
a:要初始化的 Allocator ar:已初始化的 Arena(必须比 Allocator 活得更久)
pub fun reset(ar: *Arena);
重置 Arena 为空,释放除第一个 chunk 之外的所有 chunk
重置后现有的分配将失效。
ar:要重置的 Arena