Open
Description
This issue tracks additional methods on Layout
which allow layouts to be composed to build complex layouts.
pub const fn padding_needed_for(&self, align: usize) -> usize;
pub const fn repeat(&self, n: usize) -> Result<(Layout, usize), LayoutErr>;
pub const fn repeat_packed(&self, n: usize) -> Result<Layout, LayoutErr>;
pub const fn extend_packed(&self, next: Layout) -> Result<Layout, LayoutErr>;
pub const fn dangling(&self) -> NonNull<u8>;
The main use case is to construct complex allocation layouts for use with the stable global allocator API. For example:
std::collections::HashMap
hashbrown
- Not exactly an example of use, but it would be very useful in
crossbeam-skiplist
One concern is that not many of these methods have been extensively used in practice. In the examples given above, only extend
, array
and align_to
are used, and I expect that these will be the most used in practice. padding_needed_for
is used in the implementation of Rc::from_raw
and Arc::from_raw
, but in theory could be superseded by the offset returned by extend
.
Metadata
Metadata
Assignees
Labels
Area: Custom and system allocatorsBlocker: Implemented in the nightly compiler and unstable.Category: An issue tracking the progress of sth. like the implementation of an RFCLibs issues that are tracked on the team's project board.Relevant to the library API team, which will review and decide on the PR/issue.