https://github.com/Aeledfyr/deepsize
A rust crate to find the total size of an object, on the stack and on the heap
https://github.com/Aeledfyr/deepsize
rust
Last synced: about 1 year ago
JSON representation
A rust crate to find the total size of an object, on the stack and on the heap
- Host: GitHub
- URL: https://github.com/Aeledfyr/deepsize
- Owner: Aeledfyr
- License: mit
- Created: 2019-01-23T03:12:37.000Z (over 7 years ago)
- Default Branch: master
- Last Pushed: 2024-01-12T10:50:25.000Z (over 2 years ago)
- Last Synced: 2025-04-11T11:15:50.108Z (about 1 year ago)
- Topics: rust
- Language: Rust
- Homepage:
- Size: 54.7 KB
- Stars: 106
- Watchers: 4
- Forks: 26
- Open Issues: 25
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# deepsize
 [](https://docs.rs/deepsize)
A trait and derive macro to recursively find the size of an object
and the size of allocations that it owns.
This should work in `#[no_std]` environments, but requires the `alloc` crate.
## Ownership and Reference Counting
`DeepSizeOf` counts all memory considered "owned" by the structure
that it is finding the size of. Structures behind `&` and `&mut`
references are not counted towards the total size of the structure;
however, uniquely owned structures such as `Box` and `Vec` are.
Reference counted pointers (`Arc`, and `Rc`) are counted the first
time that they appear, and are tracked to prevent them from being
counted multiple times. The `Weak` variants of each are treated like
references, and are not counted.
## Features
* `std` (enabled by default): Adds implementations of `DeepSizeOf`
for types only found in `std` such as `HashMap` and `Mutex`.
* `derive` (enabled by default): Adds support for a derive macro for
`DeepSizeOf`.
`deepsize` also has optional support for these external crates:
* `slotmap`: (version 0.4)
* `slab`: (version 0.4)
* `indexmap`: (version 1)
* `arrayvec`: (version 0.5)
* `smallvec`: (version 1)
* `hashbrown`: (version 0.9)
* `chrono`: (version 0.4)
* `actix`: (version 0.11)
* `tokio`: (version 1.1)
## Example Code
```rust
use std::mem::size_of;
use deepsize::DeepSizeOf;
#[derive(DeepSizeOf)]
struct Test {
a: u32,
b: Box<[u8]>,
}
fn main() {
let object = Test {
a: 15,
b: Box::new(*b"Hello, Wold!"),
};
assert_eq!(object.deep_size_of(), size_of::() + size_of::() * 12);
}
```