Clarify guarantees for Vec
and String
allocation
#65801
Labels
A-allocators
Area: Custom and system allocators
A-collections
Area: `std::collection`
C-enhancement
Category: An issue proposing an enhancement or a PR with one.
T-libs-api
Relevant to the library API team, which will review and decide on the PR/issue.
Similar to what #58183 did for
Box
, I think we should document a guarantee thatVec<T>
andString
are allocated through the standard library’s global allocator.Namely:
It is valid (under some conditions) to pass a pointer allocated with
std::alloc::Global
(or corresponding free functions instd::alloc
) toVec::from_raw_parts
.It is valid (under some conditions) to deallocate or reallocate with
std::alloc::Global
(or corresponding free functions instd::alloc
) a pointer fromVec::into_raw_parts
(or fromManuallyDrop
+Vec::as_mut_ptr
).Conditions include using the appropriate
std::alloc::Layout
, properly transferring ownership, etc.Perhaps the documented guarantees should also extend to using
NonNull<T>::dangling
for zero-size allocations. (And similarly forBox
.)@rust-lang/libs, any throughts?
The text was updated successfully, but these errors were encountered: