# 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` | 40 ns | 302 | 7 | 432 |
| `bumpalo_new` | 1 ns | 16 | 1 | 26 |
## `alloc_u64`
| `alloc` | 5.23 µs | 15,024 | 12 | 23,039 |
| `alloc_with` | 4.37 µs | 15,022 | 12 | 23,036 |
| `alloc_box` | 4.91 µs | 23,039 | 9 | 37,070 |
| `alloc_box_with` | 4.86 µs | 24,039 | 9 | 38,070 |
| `alloc_uninit_box` | 2.67 µs | 20,039 | 9 | 31,070 |
| `alloc_zeroed_box` | 4.87 µs | 21,039 | 9 | 33,070 |
| `alloc_arc` | 9.23 µs | 25,039 | 9 | 40,070 |
| `alloc_arc_with` | 9.37 µs | 26,039 | 8 | 41,070 |
| `alloc_uninit_arc` | 8.81 µs | 22,039 | 9 | 34,070 |
| `alloc_zeroed_arc` | 9.04 µs | 23,039 | 9 | 36,070 |
| `bumpalo_alloc` | 6.63 µs | 19,022 | 5 | 27,037 |
| `bumpalo_alloc_with` | 6.84 µs | 19,020 | 5 | 27,034 |
## `alloc_str`
| `alloc_str` | 7.00 µs | 52,049 | 10 | 78,090 |
| `alloc_str_box` | 12.40 µs | 59,049 | 13 | 85,090 |
| `alloc_str_arc` | 17.66 µs | 58,050 | 11 | 84,091 |
| `bumpalo_alloc_str` | 10.07 µs | 50,048 | 13 | 75,088 |
## `alloc_slice`
| `alloc_slice_copy` | 42.68 µs | 42,045 | 4 | 59,082 |
| `alloc_slice_clone` | 42.30 µs | 46,046 | 12 | 60,083 |
| `alloc_slice_fill_with` | 46.18 µs | 39,024 | 12 | 70,039 |
| `alloc_slice_fill_iter` | 45.51 µs | 39,025 | 11 | 70,040 |
| `alloc_slice_copy_box` | 51.94 µs | 55,182 | 15 | 83,285 |
| `alloc_slice_clone_box` | 50.74 µs | 68,182 | 24 | 92,284 |
| `alloc_slice_fill_with_box` | 54.05 µs | 48,165 | 20 | 86,253 |
| `alloc_slice_fill_iter_box` | 54.90 µs | 50,165 | 21 | 90,253 |
| `alloc_uninit_slice_box` | 48.48 µs | 23,165 | 20 | 36,253 |
| `alloc_zeroed_slice_box` | 49.89 µs | 27,165 | 20 | 43,253 |
| `alloc_slice_copy_arc` | 58.94 µs | 55,183 | 13 | 83,286 |
| `alloc_slice_clone_arc` | 55.54 µs | 61,181 | 24 | 83,283 |
| `alloc_slice_fill_with_arc` | 58.56 µs | 47,165 | 20 | 84,253 |
| `alloc_slice_fill_iter_arc` | 59.42 µs | 48,165 | 20 | 86,253 |
| `alloc_uninit_slice_arc` | 53.89 µs | 23,165 | 20 | 36,253 |
| `alloc_zeroed_slice_arc` | 54.70 µs | 26,165 | 20 | 41,253 |
| `bumpalo_alloc_slice_copy` | 41.32 µs | 38,042 | 5 | 55,076 |
| `bumpalo_alloc_slice_clone` | 40.57 µs | 60,046 | 9 | 74,083 |
| `bumpalo_alloc_slice_fill_with` | 42.45 µs | 40,020 | 5 | 70,033 |
| `bumpalo_alloc_slice_fill_iter` | 42.18 µs | 40,020 | 5 | 70,033 |
## `string_builder`
| `alloc_string` | 6.88 µs | 36,846 | 24 | 51,197 |
| `alloc_string_with_capacity` | 6.67 µs | 37,207 | 19 | 52,319 |
| `bumpalo_string_new_in` | 12.41 µs | 35,843 | 78 | 50,867 |
| `bumpalo_string_with_capacity_in` | 12.04 µs | 34,708 | 27 | 49,159 |
## `vec_builder`
| `alloc_vec` | 3.94 µs | 11,789 | 28 | 17,081 |
| `alloc_vec_with_capacity` | 3.90 µs | 12,136 | 11 | 18,215 |
| `bumpalo_vec_new_in` | 3.86 µs | 12,281 | 59 | 18,888 |
| `bumpalo_vec_with_capacity_in` | 3.65 µs | 11,069 | 7 | 17,116 |
## `drop`
| `box_u64` | 4.35 µs | 9,591 | 31 | 12,874 |
| `rc_u64` | 8.12 µs | 11,585 | 29 | 16,865 |
| `arc_u64` | 8.38 µs | 11,585 | 29 | 16,865 |
| `box_droppy` | 18.18 µs | 185,410 | 54 | 271,540 |
| `rc_droppy` | 18.77 µs | 187,409 | 52 | 275,539 |
| `arc_droppy` | 19.41 µs | 187,409 | 52 | 275,539 |
| `str_box` | 4.79 µs | 9,591 | 31 | 12,874 |
| `str_rc` | 8.40 µs | 11,585 | 30 | 16,865 |
| `str_arc` | 8.04 µs | 11,585 | 30 | 16,865 |
| `slice_box_u64` | 10.76 µs | 9,784 | 49 | 13,143 |
| `slice_rc_u64` | 14.79 µs | 11,778 | 45 | 17,134 |
| `slice_arc_u64` | 15.67 µs | 11,778 | 45 | 17,134 |
| `slice_box_droppy` | 123.72 µs | 1,507,663 | 1,110 | 2,198,195 |
| `slice_rc_droppy` | 119.06 µs | 1,510,662 | 1,108 | 2,203,193 |
| `slice_arc_droppy` | 118.97 µs | 1,510,662 | 1,108 | 2,203,193 |
| `alloc` | 1.43 µs | 402 | 17 | 589 |
## 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` | 5.23 µs | 6.63 µs | -21.2% | 15,024 | 19,022 | -21.0% |
| `alloc_str` vs `bumpalo_alloc_str` | 7.00 µs | 10.07 µs | -30.4% | 52,049 | 50,048 | +4.0% |
| `alloc_slice_copy` vs `bumpalo_alloc_slice_copy` | 42.68 µs | 41.32 µs | +3.3% | 42,045 | 38,042 | +10.5% |
| `alloc_slice_clone` vs `bumpalo_alloc_slice_clone` | 42.30 µs | 40.57 µs | +4.3% | 46,046 | 60,046 | -23.3% |
| `alloc_slice_fill_with` vs `bumpalo_alloc_slice_fill_with` | 46.18 µs | 42.45 µs | +8.8% | 39,024 | 40,020 | -2.5% |
| `alloc_slice_fill_iter` vs `bumpalo_alloc_slice_fill_iter` | 45.51 µs | 42.18 µs | +7.9% | 39,025 | 40,020 | -2.5% |
| `alloc_string` vs `bumpalo_string_new_in` | 6.88 µs | 12.41 µs | -44.6% | 36,846 | 35,843 | +2.8% |
| `alloc_string_with_capacity` vs `bumpalo_string_with_capacity_in` | 6.67 µs | 12.04 µs | -44.6% | 37,207 | 34,708 | +7.2% |
| `alloc_vec` vs `bumpalo_vec_new_in` | 3.94 µs | 3.86 µs | +2.0% | 11,789 | 12,281 | -4.0% |
| `alloc_vec_with_capacity` vs `bumpalo_vec_with_capacity_in` | 3.90 µs | 3.65 µs | +6.9% | 12,136 | 11,069 | +9.6% |