Zig 0.17.0-dev (Split by item)
This is an example of documentation generated by
ZigDoc , an alternative to Zig's built-in
Auto Doc feature. See also
examples in other modes/formats . The project being documented here (as the example) is the Zig library itself.
Zig › std/ › heap/ › ArenaAllocator.zig › free
free
ArenaAllocator.free
fn free (ctx : *anyopaque , memory : []u8 , alignment : Alignment , ret_addr : usize ) void
File
Code
fn free (ctx : *anyopaque , memory : []u8 , alignment : Alignment , ret_addr : usize ) void {
const arena : *ArenaAllocator = @ptrCast (@alignCast (ctx ));
_ = alignment ;
_ = ret_addr ;
assert (memory .len > 0 );
const node = arena .loadFirstNode ().?;
const buf_ptr = @as ([*]u8 , @ptrCast (node )) + @sizeOf (Node );
const cur_end_index = @atomicLoad (usize , &node .end_index , .monotonic );
if (buf_ptr + cur_end_index != memory .ptr + memory .len ) {
return ;
}
const new_end_index = cur_end_index - memory .len ;
assert (buf_ptr + new_end_index == memory .ptr );
_ = @cmpxchgStrong (
usize ,
&node .end_index ,
cur_end_index ,
new_end_index ,
.release ,
.monotonic ,
);
}