| // SPDX-License-Identifier: Apache-2.0 OR MIT | |
| use pin_init::*; | |
| // Struct with size over 1GiB | |
| #[derive(Debug)] | |
| #[allow(dead_code)] | |
| pub struct BigStruct { | |
| buf: [u8; 1024 * 1024 * 1024], | |
| a: u64, | |
| b: u64, | |
| c: u64, | |
| d: u64, | |
| managed_buf: ManagedBuf, | |
| } | |
| #[derive(Debug)] | |
| pub struct ManagedBuf { | |
| buf: [u8; 1024 * 1024], | |
| } | |
| impl ManagedBuf { | |
| pub fn new() -> impl Init<Self> { | |
| init!(ManagedBuf { buf <- init_zeroed() }) | |
| } | |
| } | |
| fn main() { | |
| #[cfg(any(feature = "std", feature = "alloc"))] | |
| { | |
| // we want to initialize the struct in-place, otherwise we would get a stackoverflow | |
| let buf: Box<BigStruct> = Box::init(init!(BigStruct { | |
| buf <- init_zeroed(), | |
| a: 7, | |
| b: 186, | |
| c: 7789, | |
| d: 34, | |
| managed_buf <- ManagedBuf::new(), | |
| })) | |
| .unwrap(); | |
| println!("{}", core::mem::size_of_val(&*buf)); | |
| } | |
| } |