| 12345678910111213141516171819202122232425262728293031323334353637383940414243 |
- // 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));
- }
- }
|