Skip to content
Permalink
Browse files

Add a comment on the usage of Layout:🆕:<RcBox<()>>()

  • Loading branch information...
SimonSapin committed Aug 5, 2019
1 parent 78264f5 commit ae1e201a0cd37a48bd3dabf1c643ccd5f53f7680
Showing with 4 additions and 0 deletions.
  1. +2 −0 src/liballoc/rc.rs
  2. +2 −0 src/liballoc/sync.rs
@@ -441,6 +441,8 @@ impl<T> Rc<[T]> {
#[unstable(feature = "new_uninit", issue = "63291")]
pub fn new_uninit_slice(len: usize) -> Rc<[mem::MaybeUninit<T>]> {
let data_layout = Layout::array::<mem::MaybeUninit<T>>(len).unwrap();
// This relies on `value` being the last field of `RcBox` in memory,
// so that the layout of `RcBox<T>` is the same as that of `RcBox<()>` followed by `T`.
let (layout, offset) = Layout::new::<RcBox<()>>().extend(data_layout).unwrap();
unsafe {
let allocated_ptr = Global.alloc(layout)
@@ -425,6 +425,8 @@ impl<T> Arc<[T]> {
#[unstable(feature = "new_uninit", issue = "63291")]
pub fn new_uninit_slice(len: usize) -> Arc<[mem::MaybeUninit<T>]> {
let data_layout = Layout::array::<mem::MaybeUninit<T>>(len).unwrap();
// This relies on `value` being the last field of `RcBox` in memory,
// so that the layout of `RcBox<T>` is the same as that of `RcBox<()>` followed by `T`.
let (layout, offset) = Layout::new::<ArcInner<()>>().extend(data_layout).unwrap();
unsafe {
let allocated_ptr = Global.alloc(layout)

0 comments on commit ae1e201

Please sign in to comment.
You can’t perform that action at this time.