# `memusage` `memusage` is a (some) batteries included memory usage reporting. This crate includes a simple trait `MemoryReport` that makes it easy to track memory usage in your projects. ## Usage `Cargo.toml` ``` [dependencies] memusage = "0.1.0" ``` The `MemoryReport` trait includes three associated methods: `direct`, `indirect` and `children`. ### `direct` memory report Function signature: `fn direct() -> usize` The spirit (and implementation) of this memory report is to be equivalent to `core::mem::size_of::()`. This method is used mainly for ease of use. ### `indirect` memory report Function signature: `fn indirect(&self) -> usize` This function is used to report the amount of heap (and stack in case of arrays) allocated memory of structs. This method has an associated constant in the trait (`ALLOC: bool`) which is used to indicate that the object implementing the trait owns memory other than the struct itself. For example, a `Vec` will report the full memory capacity it has reserved: `self.capacity() * T::direct()`. Code example: ``` let vec_of_usizes: Vec = vec![1, 2, 3, 4]; println!("{}", vec_of_usizes.indirect()); ``` ### `children` memory report Function signature: `fn children(&self) -> usize` This function is used to report the amount of heap allocated memory of the children of a struct. This method has an associated constant in the trait (`CHILD: bool`) which is used to indicate that the object implementing the trait has children that may allocate memory. For example, a `Vec` or `&[T]` will report the memory that the elements they contain have allocated. A `Vec` will report 0, as an `usize` does not allocate memory, but a `&[Vec]` will report some memory, as a `Vec` does allocate memory. Code example: ``` let vec_of_vecs_of_usize: Vec> = vec![vec![1], vec![2], vec![3]]; println!("{}", vec_of_vecs_of_usize.children()); ``` ## Implementors By default, this crate has some batteries included, and the `MemoryReport` trait is already implemented for some `core` and `std` objects. See below a list of all default implementors. This list may change in the future. #### Integers * i8 * i16 * i32 * i64 * i128 * isize #### Unsigned integers * u8 * u16 * u32 * u64 * u128 * usize #### Floats and misc. * f32 * f64 * bool * char #### Heap allocated * Vec * HashMap * HashSet * BinaryHeap * LinkedList * BTreeMap * BTreeSet #### Pointers and references * &T ## Future plans - [] Creation of a derive macro - [] Further implementations of the `core` and `std` objects ## License Mozilla Public License Version 2.0