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.

fillUnbuffered

This internal function is separated from fill to encourage optimizers to inline fill, hence propagating its @branchHint to usage sites. If these functions are combined, fill is large enough that LLVM is reluctant to inline it, forcing usages of APIs like takeInt to go through an expensive runtime function call just to figure out that the data is, in fact, already in the buffer.

Missing this optimization can result in wall-clock time for the most affected benchmarks increasing by a factor of 5 or more.

Reader.fillUnbuffered
fn fillUnbuffered(r: *Reader, n: usize) Error!void

File

lib/std/Io/Reader.zig:1125

Code

fn fillUnbuffered(r: *Reader, n: usize) Error!void {
    try rebase(r, n);
    var bufs: [1][]u8 = .{""};
    while (r.end < r.seek + n) _ = try r.vtable.readVec(r, &bufs);
}