Skip to content

io::Read / io::Write fns can cause a lot of allocations via io::Error::new #36658

Closed
@carllerche

Description

@carllerche

io::Error::new will always allocate. This isn't a huge deal when the error represents an actual error case, however I/O "errors" are used often to signal termination in hot paths and the allocation can cause significant bottleneck.

One example is with non-blocking I/O, io::ErrorKind::WouldBlock is used to signal that the source is not read to process the op. Suffering an allocation for this very common case is not acceptable.

To work around this, Mio provide a helper to construct a WouldBlock error without the allocation: https://github.com/carllerche/mio/blob/master/src/io.rs#L40-L49.

However, WouldBlock is not the only case. Another common case that I am hitting is using io::ErrorKind::WriteZero being triggered when calling write_all to io::Write implementations that are backed by memory (vs. an I/O type).

In general, there should be a way to construct I/O errors without allocating.

/cc @alexcrichton

Metadata

Metadata

Assignees

No one assigned

    Labels

    I-slowIssue: Problems and improvements with respect to performance of generated code.

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions