3 unstable releases
0.5.0 | Aug 26, 2024 |
---|---|
0.4.1 | Oct 18, 2020 |
0.4.0 | Jul 14, 2019 |
0.3.2 |
|
0.1.1 |
|
#108 in Memory management
29KB
334 lines
compact_arena
This is a crate with arenas that work with indices. Currently there are three
types: SmallArena
uses 32-bit indices and can hold up to 2³² objects.
TinyArena
uses 16-bit indices and can hold up to 65536 objects (only 16384
on windows), regardless of object size. NanoArena
uses 8-bit indices and
contain up to 256 objects.
This can conserve memory in scenarios where we have a large-ish number of
relations between objects, e.g. in graph algorithms. NanoArena
is likely
most useful in embedded scenarios.
Usage:
Add the following dependency to your Cargo.toml
compact_arena = "0.5"
By default, the TinyArena
uses no unsafe code to maintain storage, but
requires the stored types to be Default + Copy
. To change this, you can use
the uninit
feature to enable usage on all types with a bit more unsafe code:
compact_arena = { version = "0.5", features = ["alloc", "uninit"] }
In your code, use it as follows:
use compact_arena::mk_arena;
mk_arena!(arena);
let hello = arena.add("Hello");
let world = arena.add("World");
println!("{}, {}!", arena[hello], arena[world]);
For further information, please read the documentation.
License
Licensed under either of
- Apache License, Version 2.0, (LICENSE-APACHE or http://www.apache.org/licenses/LICENSE-2.0)
- MIT license (LICENSE-MIT or http://opensource.org/licenses/MIT)
at your option.
Contribution
Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.