模块

std.mem

Span 元数据、复制和相等辅助以及分配器接口。

状态

当前可运行:

API返回值说明
std.mem.copy(dst, src)usizeSpan<u8> 复制到调用者拥有的 MutSpan<u8> 存储中,返回复制的字节数。
std.mem.fill(dst, value)usizeu8 字节填充调用者拥有的 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
  • FixedBufAllocArena 返回指向调用者拥有存储的 MutSpan<u8> 视图。
  • ByteBuf 拥有显式分配器存储的切片,不会触及全局堆。

所有权:返回的跨度借用自原始固定缓冲区;不创建堆所有权。

目标支持:当前编译器目标。

报告契约

zero mem --json <input> 以机器可读格式报告分配器契约:

  • memoryBudgets:栈、静态、堆、竞技场、固定缓冲区、集合容量、分配器容量、请求分配和线性内存下限预算。
  • allocatorFactsNullAllocFixedBufAllocArenaPageAllocGeneralAlloc 的使用、容量、失败行为和隐藏全局分配器状态。
  • allocationInstrumentation:按使用付费的钩子,用于尝试、成功、失败、请求字节数、授予字节数和峰值活跃字节数。
  • collectionFacts:固定容量 Vec、拥有的 ByteBuf 和空 Map/Set 元数据,包括增长/失败/清理行为。

所有堆预算都是显式的。仅使用 std.mem 的程序保持 heapBytes: 0globalHeapBytes: 0hiddenHeapAllocation: false,除非分配器 API 另有说明。

设计说明

任何标准集合都不得从全局堆隐式分配。拥有堆的 API 将需要分配器能力,并记录所有权、容量和清理行为。