Crates.io | membank |
lib.rs | membank |
version | 0.5.1 |
source | src |
created_at | 2023-10-19 06:05:04.596286 |
updated_at | 2023-12-05 01:50:46.948537 |
description | A pool of reusable memory to prevent unnecessary deallocations |
homepage | |
repository | https://github.com/dsmurrow/membank |
max_upload_size | |
id | 1007514 |
size | 11,326 |
The membank crate allows users to re-use memory for later instead of de-allocating it. This is great for large, heap-allocated data.
use membank::MemoryBank;
fn main() {
let bank: MemoryBank<Vec<i32>> = MemoryBank::new();
let mut big_dumb_vec = Vec::from_iter(0..10000);
// First loan is always a new allocation
let mut loan = bank.take_loan();
loan.clone_from(&big_dumb_vec);
assert_eq!(*loan, big_dumb_vec);
// The memory in the loan is mutable
loan[9990] = 14;
big_dumb_vec[9990] = 14;
assert_eq!(*loan, big_dumb_vec);
// The loaned memory is returned to the bank
drop(loan);
// The bank reuses memory whenever it can
let same_memory = bank.take_old_loan().unwrap();
assert_eq!(*same_memory, big_dumb_vec);
// The same bank can also be shared between threads!
let bank_clone = bank.clone();
std::thread::spawn(move || {
assert_eq!(*bank.take_loan(), big_dumb_vec);
});
}