Percentage of allocs less than 48 bytes: 97.4

All allocations
# A tibble: 22 × 4
   obj_len     n n_less_than percent
     <int> <int>       <int>   <dbl>
 1       9    37          37  0.0591
 2      10    10          47  0.0751
 3      11  1814        1861  2.97  
 4      12     1        1862  2.98  
 5      16  8938       10800 17.3   
 6      18   731       11531 18.4   
 7      19  2852       14383 23.0   
 8      20    67       14450 23.1   
 9      21   100       14550 23.2   
10      22    82       14632 23.4   
11      23    77       14709 23.5   
12      24 21832       36541 58.4   
13      25    96       36637 58.5   
14      26   100       36737 58.7   
15      27    95       36832 58.9   
16      28    24       36856 58.9   
17      29    28       36884 58.9   
18      30    24       36908 59.0   
19      31    14       36922 59.0   
20      32  7178       44100 70.5   
21      33    12       44112 70.5   
22      34     2       44114 70.5   
# A tibble: 5 × 4
  obj_len     n n_less_than percent
    <int> <int>       <int>   <dbl>
1    1024     8       62572    100.
2    1032     6       62578    100.
3    1041     1       62579    100.
4    4096     2       62581    100.
5    4113     2       62583    100 

Common Sizes
# A tibble: 8 × 2
  obj_len     n
    <int> <int>
1      24 21832
2      48 15739
3      16  8938
4      32  7178
5      19  2852
6      11  1814
7      64  1076
8      40  1055

    62,583 total allocations, total bytes = 1,999,389

Typed allocations
# A tibble: 20 × 3
   func_name                                                           n percent
   <chr>                                                           <int>   <dbl>
 1 List<BigStr*>* Alloc<List<BigStr*>>()                            4658   11.2 
 2 List<runtime_asdl::part_value_t*>* Alloc<List<runtime_asdl::pa…  4086    9.86
 3 runtime_asdl::CommandStatus* Alloc<runtime_asdl::CommandStatus…  3186    7.69
 4 value_asdl::value__Str* Alloc<value_asdl::value__Str, BigStr*>…  2227    5.38
 5 syntax_asdl::word__String* Alloc<syntax_asdl::word__String, in…  1844    4.45
 6 runtime_asdl::Piece* Alloc<runtime_asdl::Piece, BigStr*&, bool…  1814    4.38
 7 runtime_asdl::VarSubState* Alloc<runtime_asdl::VarSubState, bo…  1814    4.38
 8 value_asdl::LeftName* Alloc<value_asdl::LeftName, BigStr*&, sy…  1803    4.35
 9 syntax_asdl::loc__Arith* Alloc<syntax_asdl::loc__Arith, syntax…  1780    4.30
10 value_asdl::value__Str* Alloc<value_asdl::value__Str, BigStr*&…   998    2.41
11 List<syntax_asdl::CompoundWord*>* Alloc<List<syntax_asdl::Comp…   981    2.37
12 List<int>* Alloc<List<int>>()                                     956    2.31
13 mylib::BufWriter* Alloc<mylib::BufWriter>()                       945    2.28
14 List<List<runtime_asdl::Piece*>*>* Alloc<List<List<runtime_asd…   932    2.25
15 List<Tuple2<runtime_asdl::span_e, int>*>* Alloc<List<Tuple2<ru…   932    2.25
16 List<mylib::BufWriter*>* Alloc<List<mylib::BufWriter*>>()         932    2.25
17 List<runtime_asdl::Piece*>* Alloc<List<runtime_asdl::Piece*>>()   932    2.25
18 Tuple2<runtime_asdl::span_e, int>* Alloc<Tuple2<runtime_asdl::…   932    2.25
19 syntax_asdl::loc__Word* Alloc<syntax_asdl::loc__Word, syntax_a…   922    2.23
20 runtime_asdl::Piece* Alloc<runtime_asdl::Piece, BigStr*, bool&…   890    2.15
# A tibble: 5 × 3
  func_name                                                            n percent
  <chr>                                                            <int>   <dbl>
1 value_asdl::value__List* Alloc<value_asdl::value__List, List<va…     1 0.00241
2 word_eval::CompletionWordEvaluator* Alloc<word_eval::Completion…     1 0.00241
3 word_eval::NormalWordEvaluator* Alloc<word_eval::NormalWordEval…     1 0.00241
4 word_eval::TildeEvaluator* Alloc<word_eval::TildeEvaluator, sta…     1 0.00241
5 word_parse::WordParser* Alloc<word_parse::WordParser, parse_lib…     1 0.00241

41,428 typed allocs, including 16,385 List<T>
66.20% of allocs are typed

Str - NewStr() and OverAllocatedStr()
# A tibble: 16 × 4
   str_len     n n_less_than percent
     <int> <int>       <int>   <dbl>
 1       1   731         731    16.3
 2       2  2852        3583    79.9
 3       3    67        3650    81.4
 4       4   100        3750    83.6
 5       5    82        3832    85.5
 6       6    77        3909    87.2
 7       7   104        4013    89.5
 8       8    96        4109    91.7
 9       9   100        4209    93.9
10      10    95        4304    96.0
11      11    17        4321    96.4
12      12    28        4349    97.0
13      13    24        4373    97.5
14      14    14        4387    97.9
15      15     9        4396    98.1
16      16    12        4408    98.3
# A tibble: 5 × 4
  str_len     n n_less_than percent
    <int> <int>       <int>   <dbl>
1     134     1        4478    99.9
2     202     1        4479    99.9
3     255     1        4480    99.9
4    1024     1        4481   100. 
5    4096     2        4483   100  

4,483 string allocations, total length = 24,715, total bytes = 100,926

7.16% of allocs are strings
5.05% of bytes are strings

NewSlab()
  Lengths
# A tibble: 6 × 4
  slab_len     n n_less_than percent
     <int> <int>       <int>   <dbl>
1        5 13986       13986    83.9
2        7   527       14513    87.1
3        8    50       14563    87.4
4       10  1086       15649    93.9
5       14    78       15727    94.3
6       15    53       15780    94.6
# A tibble: 5 × 4
  slab_len     n n_less_than percent
     <int> <int>       <int>   <dbl>
1      127    11       16627    99.7
2      128    36       16663    99.9
3      254     1       16664   100. 
4      256     6       16670   100. 
5     1022     2       16672   100  

  Slab Types
# A tibble: 6 × 2
  func_name                                                                    n
  <chr>                                                                    <int>
1 Slab<BigStr*>* NewSlab<BigStr*>(int)                                      4746
2 Slab<runtime_asdl::part_value_t*>* NewSlab<runtime_asdl::part_value_t*>…  4086
3 Slab<int>* NewSlab<int>(int)                                              1625
4 Slab<syntax_asdl::CompoundWord*>* NewSlab<syntax_asdl::CompoundWord*>(i…  1422
5 Slab<List<runtime_asdl::Piece*>*>* NewSlab<List<runtime_asdl::Piece*>*>…   932
6 Slab<Tuple2<runtime_asdl::span_e, int>*>* NewSlab<Tuple2<runtime_asdl::…   932
# A tibble: 5 × 2
  func_name                                                                    n
  <chr>                                                                    <int>
1 Slab<syntax_asdl::debug_frame_t*>* NewSlab<syntax_asdl::debug_frame_t*>…     1
2 Slab<syntax_asdl::loc_t*>* NewSlab<syntax_asdl::loc_t*>(int)                 1
3 Slab<value_asdl::regex_match_t*>* NewSlab<value_asdl::regex_match_t*>(i…     1
4 Slab<value_asdl::value__Dict*>* NewSlab<value_asdl::value__Dict*>(int)       1
5 Slab<vm::_AssignBuiltin*>* NewSlab<vm::_AssignBuiltin*>(int)                 1

16,672 slabs, total items = 129,353
26.64% of allocs are slabs

::reserve(int n)

  Num Items
# A tibble: 15 × 4
   num_items     n n_less_than percent
       <int> <int>       <int>   <dbl>
 1         0     5           5  0.0154
 2         1 20652       20657 63.5   
 3         2  4247       24904 76.6   
 4         3  1684       26588 81.8   
 5         4  2401       28989 89.1   
 6         5  2724       31713 97.5   
 7         6   520       32233 99.1   
 8         7    25       32258 99.2   
 9         8    39       32297 99.3   
10         9    21       32318 99.4   
11        10    19       32337 99.4   
12        11    47       32384 99.6   
13        12     8       32392 99.6   
14        13     6       32398 99.6   
15        14     7       32405 99.7   
# A tibble: 5 × 4
  num_items     n n_less_than percent
      <int> <int>       <int>   <dbl>
1        63     1       32508    100.
2        64     5       32513    100.
3       113     2       32515    100.
4       179     1       32516    100.
5      1022     2       32518    100 

32,518 reserve() calls, total items = 67,190

Untyped: 62,583
Typed + Str + Slab: 62,583