The Little Things: The Missing Performance in std::vector

Marek Knápek@programming.dev to Programming@programming.dev – 54 points –
codingnest.com
11

You are viewing a single comment

I don't know about C++, but in Rust the push is inline, and still doesn't always optimize checks away due to an annoying edge case: integer overflow. Reserving (old_len + new_len) could give you a smaller buffer than new_len. The optimizer sees it and is pedantic about it.

In C++ integer overflow is UB so this edge case cannot exist

Only signed overflow. size_t is unsigned.

That's totally right but I thought you were talking about signed numbers since you said “integer overflow”. I forgot that len is usually unsigned in C++.