Tracking issue for alloc_layout_extra (original) (raw)

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;

The main use case is to construct complex allocation layouts for use with the stable global allocator API. For example:

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.