[−][src]Crate arr
The arr crate is a simple fixed size array designed to allow huge array allocation without stack overflows.
Even in rustc 1.44 allocating arrays too large to fit on the stack (say 8MB in size) will stack overflow even if the array is Boxed.
Basic usage:
use arr::Array; // zero - fast allocation let big_array: Array<u8> = Array::zero(1 << 25); // default - slow allocation let big_array2: Array<u8> = Array::new(1 << 25); // template let template = 10u8; let big_array3: Array<u8> = Array::new_from_template(1 << 25, &template); // Also works for 2d arrays (note even the sub-array would ordinarily blow stack) let big_2d_array: Array<[u8; 1 << 25]> = Array::zero(4);
Try to do this with a traditional array:
let big_array: Box<[u8; 1 << 25]> = Box::new([0u8; 1 << 25]);
Currently the array supports three modes of allocation, via new
(requires types to have Default +
Copy) and new_from_template
, only requiring Clone. The zero
constructor uses an internal
Zeroable trait only set for primitive types and their arrays. In the future this concept may be
unsafely extended outside of this crate but for now it's private. As long as this type fits on the stack and
the array fits in memory this should be allocatable.
Structs
Array | |
ArrayIter |
Traits
Zeroable | Marker trait to determine if a type is auto-zeroable. This allows the initialization to simply zero out the buffer on initialization. |