-
Notifications
You must be signed in to change notification settings - Fork 292
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
Is the conversion from bytes to Vec<u8> O(1) #711
Comments
Beyond requiring that the refcount is 1. It is also required that the data is stored at the beginning of the underlying allocation. Otherwise, it will need to copy the data backwards. Lines 1215 to 1218 in fa1daac
The memory in a |
So in all cases there is a copy operation, but if the refcount is not 1 (or data not stored at the beginning of the underlying allocation) there is also an allocation? Should I make a PR to update the docstring? |
If the refcount is one, it's just a copy within the existing buffer. There is no allocation. Allocations only happen if the refcount is at least 2. You're very welcome to send a PR. |
I tried to find where the docs for https://docs.rs/bytes/latest/bytes/struct.Bytes.html#method.to_vec are defined but I couldn't find them |
Oh, that method will certainly copy the bytes unconditionally. It's defined on the standard library slice type, and The conversion that we provide is here: Lines 943 to 948 in fa1daac
It's called using the |
Is the conversion from bytes to Vec O(1) if the underlying memory is already contiguous and the ref count is 1?
Or do we still have new allocations and copying?
I looked at #547, it seems to suggest that it indeed is O(1) but the docs say
Copies self into a new Vec.
The text was updated successfully, but these errors were encountered: