# Multitude Performance Report
Generated by `scripts/perf_report.rs`:
- `cargo bench --bench criterion_alloc` and `criterion_drop` — criterion wall-clock timings.
- `cargo bench --bench gungraun_alloc` and `gungraun_drop` — Callgrind instruction-precise counts.
**Workload:** N = 1000 operations per measurement; slice element count = 8.
Criterion median is reported (default 30 samples, 1 s warm-up, 2 s measurement; override with `--samples` / `--measurement-time` / `--warm-up-time`).
Memory accesses = L1 Hits + LL Hits + RAM Hits (Callgrind D-cache references).
Bench names are aligned between criterion and gungraun via the `GROUPS` table in `scripts/perf_report.rs`.
## `arena_creation`
| `multitude_new` | 38 ns | 316 | 9 | 457 |
| `bumpalo_new` | 1 ns | 16 | 1 | 26 |
## `alloc_u64`
| `alloc` | 6.45 µs | 14,026 | 6 | 21,043 |
| `alloc_with` | 6.53 µs | 14,024 | 11 | 21,040 |
| `alloc_box` | 5.24 µs | 23,043 | 9 | 37,078 |
| `alloc_box_with` | 5.18 µs | 24,043 | 9 | 38,078 |
| `alloc_uninit_box` | 2.33 µs | 20,043 | 9 | 31,078 |
| `alloc_zeroed_box` | 4.85 µs | 21,043 | 9 | 33,078 |
| `alloc_arc` | 5.36 µs | 23,043 | 7 | 37,078 |
| `alloc_arc_with` | 5.19 µs | 24,043 | 9 | 38,078 |
| `alloc_uninit_arc` | 2.33 µs | 20,043 | 9 | 31,078 |
| `alloc_zeroed_arc` | 4.96 µs | 21,043 | 9 | 33,078 |
| `bumpalo_alloc` | 5.97 µs | 19,022 | 4 | 27,037 |
| `bumpalo_alloc_with` | 6.08 µs | 19,020 | 4 | 27,034 |
## `alloc_str`
| `alloc_str` | 8.24 µs | 51,053 | 10 | 76,098 |
| `alloc_str_box` | 11.83 µs | 59,053 | 11 | 85,098 |
| `alloc_str_arc` | 11.89 µs | 59,053 | 11 | 85,098 |
| `bumpalo_alloc_str` | 9.13 µs | 50,048 | 13 | 75,088 |
## `alloc_slice`
| `alloc_slice_copy` | 22.82 µs | 41,049 | 4 | 57,090 |
| `alloc_slice_clone` | 22.50 µs | 45,050 | 10 | 58,091 |
| `alloc_slice_fill_with` | 24.07 µs | 38,026 | 11 | 68,043 |
| `alloc_slice_fill_iter` | 24.18 µs | 38,027 | 11 | 68,044 |
| `alloc_slice_copy_box` | 41.99 µs | 55,646 | 33 | 83,916 |
| `alloc_slice_clone_box` | 42.18 µs | 68,646 | 40 | 92,915 |
| `alloc_slice_fill_with_box` | 43.59 µs | 48,585 | 40 | 86,809 |
| `alloc_slice_fill_iter_box` | 43.84 µs | 50,585 | 39 | 90,809 |
| `alloc_uninit_slice_box` | 39.83 µs | 23,585 | 40 | 36,809 |
| `alloc_zeroed_slice_box` | 40.73 µs | 27,585 | 40 | 43,809 |
| `alloc_slice_copy_arc` | 42.49 µs | 53,647 | 34 | 80,917 |
| `alloc_slice_clone_arc` | 42.37 µs | 59,645 | 39 | 80,914 |
| `alloc_slice_fill_with_arc` | 44.47 µs | 46,585 | 41 | 82,809 |
| `alloc_slice_fill_iter_arc` | 43.77 µs | 47,585 | 40 | 84,809 |
| `alloc_uninit_slice_arc` | 40.01 µs | 22,585 | 40 | 34,809 |
| `alloc_zeroed_slice_arc` | 41.27 µs | 25,585 | 40 | 39,809 |
| `bumpalo_alloc_slice_copy` | 23.49 µs | 38,042 | 4 | 55,076 |
| `bumpalo_alloc_slice_clone` | 24.38 µs | 60,046 | 9 | 74,083 |
| `bumpalo_alloc_slice_fill_with` | 25.44 µs | 40,020 | 5 | 70,033 |
| `bumpalo_alloc_slice_fill_iter` | 25.43 µs | 40,020 | 5 | 70,033 |
## `string_builder`
| `alloc_string` | 8.05 µs | 36,836 | 32 | 51,184 |
| `alloc_string_with_capacity` | 7.64 µs | 37,194 | 21 | 52,304 |
| `bumpalo_string_new_in` | 9.20 µs | 35,843 | 76 | 50,867 |
| `bumpalo_string_with_capacity_in` | 10.62 µs | 34,708 | 28 | 49,159 |
## `vec_builder`
| `alloc_vec` | 1.25 µs | 11,765 | 31 | 17,053 |
| `alloc_vec_with_capacity` | 1.23 µs | 12,132 | 8 | 18,215 |
| `bumpalo_vec_new_in` | 3.72 µs | 12,281 | 61 | 18,888 |
| `bumpalo_vec_with_capacity_in` | 3.48 µs | 11,069 | 2 | 17,116 |
## `drop`
| `box_u64` | 8.42 µs | 10,309 | 55 | 13,904 |
| `rc_u64` | 8.18 µs | 10,309 | 55 | 13,904 |
| `arc_u64` | 8.36 µs | 10,309 | 55 | 13,904 |
| `box_droppy` | 22.06 µs | 186,161 | 77 | 272,621 |
| `rc_droppy` | 27.37 µs | 219,386 | 80 | 320,930 |
| `arc_droppy` | 27.25 µs | 219,386 | 80 | 320,930 |
| `str_box` | 7.59 µs | 10,309 | 55 | 13,904 |
| `str_rc` | 7.68 µs | 10,309 | 55 | 13,904 |
| `str_arc` | 7.71 µs | 10,309 | 55 | 13,904 |
| `slice_box_u64` | 13.96 µs | 10,819 | 58 | 14,639 |
| `slice_rc_u64` | 12.30 µs | 10,819 | 58 | 14,639 |
| `slice_arc_u64` | 12.59 µs | 10,819 | 58 | 14,639 |
| `slice_box_droppy` | 115.72 µs | 1,520,210 | 1,848 | 2,214,775 |
| `slice_rc_droppy` | 122.93 µs | 1,546,283 | 1,110 | 2,253,860 |
| `slice_arc_droppy` | 122.05 µs | 1,546,283 | 1,110 | 2,253,860 |
| `alloc` | 686 ns | 337 | 15 | 504 |
## Multitude vs Bumpalo Head-to-Head
Direct comparisons of multitude versus bumpalo on identical workloads (the multitude variant chosen is the closest semantic equivalent to bumpalo's plain bump-allocation).
| `alloc` vs `bumpalo_alloc` | 6.45 µs | 5.97 µs | +8.1% | 14,026 | 19,022 | -26.3% |
| `alloc_str` vs `bumpalo_alloc_str` | 8.24 µs | 9.13 µs | -9.7% | 51,053 | 50,048 | +2.0% |
| `alloc_slice_copy` vs `bumpalo_alloc_slice_copy` | 22.82 µs | 23.49 µs | -2.9% | 41,049 | 38,042 | +7.9% |
| `alloc_slice_clone` vs `bumpalo_alloc_slice_clone` | 22.50 µs | 24.38 µs | -7.7% | 45,050 | 60,046 | -25.0% |
| `alloc_slice_fill_with` vs `bumpalo_alloc_slice_fill_with` | 24.07 µs | 25.44 µs | -5.4% | 38,026 | 40,020 | -5.0% |
| `alloc_slice_fill_iter` vs `bumpalo_alloc_slice_fill_iter` | 24.18 µs | 25.43 µs | -4.9% | 38,027 | 40,020 | -5.0% |
| `alloc_string` vs `bumpalo_string_new_in` | 8.05 µs | 9.20 µs | -12.5% | 36,836 | 35,843 | +2.8% |
| `alloc_string_with_capacity` vs `bumpalo_string_with_capacity_in` | 7.64 µs | 10.62 µs | -28.0% | 37,194 | 34,708 | +7.2% |
| `alloc_vec` vs `bumpalo_vec_new_in` | 1.25 µs | 3.72 µs | -66.3% | 11,765 | 12,281 | -4.2% |
| `alloc_vec_with_capacity` vs `bumpalo_vec_with_capacity_in` | 1.23 µs | 3.48 µs | -64.6% | 12,132 | 11,069 | +9.6% |