uucore: ringbuffer pre-allocates memory based on size given #8895
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
This PR makes a slight change to the existing code in uucore/features/ringbuffer.rs.
Currently, the
RingBuffer<T>
struct'snew()
function creates the ringbuffer with an emptyVecDeque<T>
that does not reserve a certain capacity for elements. Internally,VecDeque<T>
resizes and copies the element of its buffer to a new double sized buffer when it's at capacity andpush_back()
call is invoked. For a fixed-size ringbuffer, instead of paying the cost of resizing the buffer at every power of 2, we can pay the cost of directly allocating exactly the memory we want from the requested size in thenew()
function upfront to avoid resizing. It also removes the need for asize
field in theRingBuffer<T>
struct becauseVecDeque<T>
has acapacity()
method that tells you how many items the buffer can contain without reallocating.