Crate flex_array

Source
Expand description

§Flexible Array

The flex_array crate provides a #[no_std] flexible array similar to std::Vec, but with greater control over memory usage. It allows customization of the types used for length, capacity, and indexing operations, making it more efficient in certain use cases.

§Why Use FlexArr?

I wrote FlexArr to address some limitations of Rust’s standard std::Vec:

  • Reduced Memory Overhead: The std::Vec on a 64-bit system typically uses 24 bytes. By specifying a smaller type for length and capacity (e.g., u32), FlexArr can reduce this to just 16 bytes, helping one optimizing memory usage.

  • Fallible Allocations: Instead of panicking on allocation failure, FlexArr returns an error, allowing for more robust or graceful error handling. While std::Vec has some fallible methods, most are still unstable.

  • Custom Allocator Support: Since Rust’s allocator API is unstable, FlexArr introduces the AltAllocator trait as an alternative to the standard Allocator trait. If the the allocator API is stabilized, this will basically just become an an alias for Allocator.

§Feature Flags

  • std_alloc – Enables a wrapper called Global that implements AltAllocator using the standard allocator APIs.

  • alloc_unstable – Enables support for Rust’s unstable Allocator trait for custom allocators. When used with std_alloc, this re-exports the Global type from std instead of the custom wrapper named Global.

  • alloc_api2 Enables support for the allocator-api2 crate, which also provides an Allocator trait in stable rust. This way if you already have allocators written against this you can use them with the flex_array crate. Note: This feature should not be enabled with alloc_unstable feature. If you want to use both just able to enable alloc_unstable and nightly in the allocator-api2 crate. Additionally, if you are using the nightly feature of the allocator-api2 crate you will need to enable the alloc_unstable feature.

Modules§

alloc
Contains mainly allocator types and traits used by FlexArr The most important being the AltAllocator trait, and the AllocError type.
types
Contains types that are use by FlexArr The important types are the LengthType and FlexArrErr.

Structs§

FlexArr
FlexArr is a dynamic array that addresses some of the limitations of Rust’s standard Vec.