Open cBournhonesque opened 3 months ago
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.
if the underlying memory is already contiguous
The memory in a Bytes
is always contiguous.
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 Bytes
does not (and can't) override it.
The conversion that we provide is here:
It's called using the From
trait rather than a method called to_vec
.
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 https://github.com/tokio-rs/bytes/pull/547, it seems to suggest that it indeed is O(1) but the docs say
Copies self into a new Vec.