状态
当前可运行:
| API | 返回值 | 说明 |
|---|---|---|
std.mem.copy(dst, src) | usize | 从 Span<u8> 复制到调用者拥有的 MutSpan<u8> 存储中,返回复制的字节数。 |
std.mem.fill(dst, value) | usize | 用 u8 字节填充调用者拥有的 MutSpan<u8> 存储,返回填充的字节数。 |
std.mem.eql(a, b) | Bool | 比较字符串支持的字节输入。 |
std.mem.span(value) | Span<u8> | 基于字符串字面量构建原生 Span<u8> 视图。 |
std.mem.len(bytes) | usize | 返回固定数组、Span<T> 或 MutSpan<T> 的长度。 |
std.mem.eqlBytes(a, b) | Bool | 比较两个具有相同元素类型的 Span<T>/MutSpan<T> 值。 |
std.mem.nullAlloc() | NullAlloc | 创建始终返回 null 的分配器,用于证明代码不进行分配。 |
std.mem.fixedBufAlloc(buffer) | FixedBufAlloc | 从调用者拥有的 MutSpan<u8> 字节创建可变固定缓冲区分配器。 |
std.mem.arena(buffer) | FixedBufAlloc | 固定缓冲区分配器模型上的竞技场风格别名;reset 回卷调用者拥有的存储。 |
std.mem.pageAlloc() | PageAlloc | 显式宿主分配器句柄元数据;不会创建环境全局分配器。 |
std.mem.generalAlloc() | GeneralAlloc | 显式通用分配器句柄元数据;调用者仍需显式传递分配器状态。 |
std.mem.allocBytes(alloc, len) | Maybe<MutSpan<u8>> | 从 NullAlloc 或可变 FixedBufAlloc 绑定分配字节。 |
std.mem.byteBuf(alloc, len) | Maybe<owned<ByteBuf>> | 创建由显式调用者提供的分配器存储支持的拥有字节缓冲区。 |
std.mem.bufBytes(&buf) | MutSpan<u8> | 从拥有的 ByteBuf 借用可写字节。 |
std.mem.bufLen(&buf) | usize | 返回 ByteBuf 的活跃长度。 |
std.mem.reset(&mut arena) | Void | 重置调用者拥有的竞技场/固定缓冲区分配状态。 |
std.mem.capacity(arena) | usize | 报告固定缓冲区容量。 |
std.mem.vec(storage) | Vec | 基于调用者拥有的可变存储的单态字节向量。 |
std.mem.vecPush(&mut vec, value) | Bool | 当有剩余容量时追加一个字节;返回 false 而非隐式扩容。 |
std.mem.vecLen(&vec) | usize | 报告当前向量长度。 |
std.mem.vecCapacity(&vec) | usize | 报告调用者提供的向量容量。 |
std.mem.mapEmpty() / std.mem.setEmpty() | Map / Set | 无分配的空固定元数据值。 |
std.mem.mapLen(&map) / std.mem.setLen(&set) | usize | 对当前空元数据值报告 0。 |
示例
type SliceView bytes Span<u8> values Span<i32> pub fn main Void world World ! let bytes Span<u8> std.mem.span "zero-memory" let same std.mem.span "zero-memory" mut scratch [11]u8 [0_u8;11] let copied std.mem.copy scratch bytes mut ints [3]i32 [1, 2, 3] let intSpan MutSpan<i32> ints set intSpan[1] 20 let view SliceView . bytes bytes values intSpan if && (&& (&& (&& (== copied 11) (== (std.mem.len view.bytes) 11)) (std.mem.eqlBytes view.bytes same)) (== (std.mem.len view.values) 3)) (std.mem.eqlBytes view.values intSpan) check world.out.write "memory type forms runnable\n"分配器示例
pub fn main Void world World ! mut storage [8]u8 [0, 0, 0, 0, 0, 0, 0, 0] mut alloc FixedBufAlloc std.mem.fixedBufAlloc storage let bytes std.mem.allocBytes alloc 4 if bytes.has set bytes.value[0] 90 check world.out.write "fixed buffer allocated\n"副作用:除调用者代码执行的写入外无其他副作用。
分配行为:
NullAlloc始终返回null。FixedBufAlloc和Arena返回指向调用者拥有存储的MutSpan<u8>视图。ByteBuf拥有显式分配器存储的切片,不会触及全局堆。
所有权:返回的跨度借用自原始固定缓冲区;不创建堆所有权。
目标支持:当前编译器目标。
报告契约
zero mem --json <input> 以机器可读格式报告分配器契约:
memoryBudgets:栈、静态、堆、竞技场、固定缓冲区、集合容量、分配器容量、请求分配和线性内存下限预算。allocatorFacts:NullAlloc、FixedBufAlloc、Arena、PageAlloc和GeneralAlloc的使用、容量、失败行为和隐藏全局分配器状态。allocationInstrumentation:按使用付费的钩子,用于尝试、成功、失败、请求字节数、授予字节数和峰值活跃字节数。collectionFacts:固定容量Vec、拥有的ByteBuf和空Map/Set元数据,包括增长/失败/清理行为。
所有堆预算都是显式的。仅使用 std.mem 的程序保持 heapBytes: 0、globalHeapBytes: 0 和 hiddenHeapAllocation: false,除非分配器 API 另有说明。
设计说明
任何标准集合都不得从全局堆隐式分配。拥有堆的 API 将需要分配器能力,并记录所有权、容量和清理行为。