Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

cstring: avoid excessive growth just to 0-terminate #35871

Merged
merged 1 commit into from
Aug 22, 2016

Commits on Aug 21, 2016

  1. cstring: avoid excessive growth just to 0-terminate

    Based on following what happens in CString::new("string literal"):
    
    1. Using `Into<Vec<u8>>`, a Vec is allocated with capacity exactly equal
       to the string's input length.
    2. By `v.push(0)`, the Vec is grown to twice capacity, since it was full.
    3. By `v.into_boxed_slice()`, the Vec capacity is shrunk to fit the length again.
    
    If we use `.reserve_exact(1)` just before the push, then we avoid the
    capacity doubling that we're going to have to shrink anyway.
    
    Growing by just 1 byte means that the step (2) is less likely to have to
    move the memory to a larger allocation chunk, and that the step (3) does
    not have to reallocate.
    bluss committed Aug 21, 2016
    Configuration menu
    Copy the full SHA
    876c02c View commit details
    Browse the repository at this point in the history