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.zig › testAllocatorAlignedShrink
testAllocatorAlignedShrink
heap.testAllocatorAlignedShrink
pub fn testAllocatorAlignedShrink (base_allocator : mem .Allocator ) !void
File
Code
pub fn testAllocatorAlignedShrink (base_allocator : mem .Allocator ) !void {
var validationAllocator = mem .validationWrap (base_allocator );
const allocator = validationAllocator .allocator ();
var debug_buffer : [1000 ]u8 = undefined ;
var fib = FixedBufferAllocator .init (&debug_buffer );
const debug_allocator = fib .allocator ();
const alloc_size = pageSize () * 2 + 50 ;
var slice = try allocator .alignedAlloc (u8 , .@"16" , alloc_size );
defer allocator .free (slice );
var stuff_to_free = std .array_list .Managed ([]align (16 ) u8 ).init (debug_allocator );
// which is 16 pages, hence the 32. This test may require to increase
// the size of the allocations feeding the `allocator` parameter if they
// fail, because of this high over-alignment we want to have.
while (@intFromPtr (slice .ptr ) == mem .alignForward (usize , @intFromPtr (slice .ptr ), pageSize () * 32 )) {
try stuff_to_free .append (slice );
slice = try allocator .alignedAlloc (u8 , .@"16" , alloc_size );
}
while (stuff_to_free .pop ()) |item | {
allocator .free (item );
}
slice [0 ] = 0x12 ;
slice [60 ] = 0x34 ;
slice = try allocator .reallocAdvanced (slice , alloc_size / 2 , 0 );
try testing .expect (slice [0 ] == 0x12 );
try testing .expect (slice [60 ] == 0x34 );
}