1 // SPDX-License-Identifier: Apache-2.0 OR MIT
2 
3 use pin_init::*;
4 
5 // Struct with size over 1GiB
6 #[derive(Debug)]
7 #[allow(dead_code)]
8 pub struct BigStruct {
9     buf: [u8; 1024 * 1024 * 1024],
10     a: u64,
11     b: u64,
12     c: u64,
13     d: u64,
14     managed_buf: ManagedBuf,
15 }
16 
17 #[derive(Debug)]
18 pub struct ManagedBuf {
19     buf: [u8; 1024 * 1024],
20 }
21 
22 impl ManagedBuf {
new() -> impl Init<Self>23     pub fn new() -> impl Init<Self> {
24         init!(ManagedBuf { buf <- init_zeroed() })
25     }
26 }
27 
main()28 fn main() {
29     #[cfg(any(feature = "std", feature = "alloc"))]
30     {
31         // we want to initialize the struct in-place, otherwise we would get a stackoverflow
32         let buf: Box<BigStruct> = Box::init(init!(BigStruct {
33             buf <- init_zeroed(),
34             a: 7,
35             b: 186,
36             c: 7789,
37             d: 34,
38             managed_buf <- ManagedBuf::new(),
39         }))
40         .unwrap();
41         println!("{}", core::mem::size_of_val(&*buf));
42     }
43 }
44