Skip to content

Clarify guarantees for Vec and String allocation #65801

Open
@SimonSapin

Description

@SimonSapin

Similar to what #58183 did for Box, I think we should document a guarantee that Vec<T> and String 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 in std::alloc) to Vec::from_raw_parts.

  • It is valid (under some conditions) to deallocate or reallocate with std::alloc::Global (or corresponding free functions in std::alloc) a pointer from Vec::into_raw_parts (or from ManuallyDrop + 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 for Box.)

@rust-lang/libs, any throughts?

Metadata

Metadata

Assignees

No one assigned

    Labels

    A-allocatorsArea: Custom and system allocatorsA-collectionsArea: `std::collections`C-enhancementCategory: An issue proposing an enhancement or a PR with one.T-libs-apiRelevant to the library API team, which will review and decide on the PR/issue.

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions