Function syncpool::raw_box [−][src]
pub unsafe fn raw_box<T>() -> Box<T>
Create a box structure without moving the wrapped value from the stack to the heap. This API is most useful when the wrapped value is too large for the default stack size, such that initializing and packing the valuing into the box is a pain.
Note that calling the API is unsafe, because it only creates a well-aligned memory structure in the heap, but all fields are in the state of undefined behavior at the moment. You must initialize the fields with default values, or pack it with meaningful placeholders. Using the object directly after being created by the API is extremely dangerous and will almost certainly lead to undefined behaviors.
Examples
Create a boxed BigStruct
use syncpool::raw_box; struct BigStruct { a: u32, b: u32, c: [u8; 0x1_000_000], } // create the object on the heap directly let mut big: Box<BigStruct> = unsafe { raw_box::<BigStruct>() }; // initialize the fields big.a = 0; big.b = 42; big.c = [0u8; 0x1_000_000]; // the fields are now valid assert_eq!(big.c.len(), 0x1_000_000); assert_eq!(big.c[4200], 0); assert_eq!(big.a, 0);