Percentage of allocs less than 48 bytes: 92.0

All allocations
# A tibble: 22 × 4
   obj_len     n n_less_than percent
     <int> <int>       <int>   <dbl>
 1       9    39          39  0.0244
 2      10     2          41  0.0257
 3      11  2005        2046  1.28  
 4      12     1        2047  1.28  
 5      16 14765       16812 10.5   
 6      18   314       17126 10.7   
 7      19  2366       19492 12.2   
 8      20  3615       23107 14.5   
 9      21  4076       27183 17.0   
10      22  1036       28219 17.7   
11      23  1025       29244 18.3   
12      24 51154       80398 50.3   
13      25  1059       81457 51.0   
14      26  4045       85502 53.5   
15      27    32       85534 53.5   
16      28    26       85560 53.5   
17      29    29       85589 53.6   
18      30    26       85615 53.6   
19      31    17       85632 53.6   
20      32 14255       99887 62.5   
21      33    10       99897 62.5   
22      34     3       99900 62.5   
# A tibble: 5 × 4
  obj_len     n n_less_than percent
    <int> <int>       <int>   <dbl>
1    1024     8      159768    100.
2    1032     6      159774    100.
3    1041     1      159775    100.
4    4096     2      159777    100.
5    4113     2      159779    100 

Common Sizes
# A tibble: 8 × 2
  obj_len     n
    <int> <int>
1      24 51154
2      48 42985
3      16 14765
4      32 14255
5      64  4167
6      40  4107
7      21  4076
8      26  4045

    159,779 total allocations, total bytes = 6,304,641

Typed allocations
# A tibble: 20 × 3
   func_name                                                           n percent
   <chr>                                                           <int>   <dbl>
 1 List<BigStr*>* Alloc<List<BigStr*>>()                           10089   11.3 
 2 List<runtime_asdl::part_value_t*>* Alloc<List<runtime_asdl::pa…  8010    8.95
 3 runtime_asdl::CommandStatus* Alloc<runtime_asdl::CommandStatus…  5010    5.60
 4 runtime_asdl::Piece* Alloc<runtime_asdl::Piece, BigStr*, bool&…  5003    5.59
 5 List<syntax_asdl::CompoundWord*>* Alloc<List<syntax_asdl::Comp…  4043    4.52
 6 syntax_asdl::word__String* Alloc<syntax_asdl::word__String, in…  4004    4.48
 7 List<int>* Alloc<List<int>>()                                    3021    3.38
 8 mylib::BufWriter* Alloc<mylib::BufWriter>()                      3007    3.36
 9 List<List<runtime_asdl::Piece*>*>* Alloc<List<List<runtime_asd…  3004    3.36
10 List<runtime_asdl::Piece*>* Alloc<List<runtime_asdl::Piece*>>()  3004    3.36
11 List<Tuple2<runtime_asdl::span_e, int>*>* Alloc<List<Tuple2<ru…  3002    3.36
12 List<mylib::BufWriter*>* Alloc<List<mylib::BufWriter*>>()        3002    3.36
13 Tuple2<runtime_asdl::span_e, int>* Alloc<Tuple2<runtime_asdl::…  3002    3.36
14 value_asdl::value__Str* Alloc<value_asdl::value__Str, BigStr*&…  2046    2.29
15 runtime_asdl::VarSubState* Alloc<runtime_asdl::VarSubState, bo…  2005    2.24
16 runtime_asdl::cmd_value__Argv* Alloc<runtime_asdl::cmd_value__…  2004    2.24
17 value_asdl::value__Str* Alloc<value_asdl::value__Str, BigStr*>…  2004    2.24
18 runtime_asdl::Piece* Alloc<runtime_asdl::Piece, BigStr*&, bool…  2003    2.24
19 syntax_asdl::loc__Word* Alloc<syntax_asdl::loc__Word, syntax_a…  2002    2.24
20 syntax_asdl::loc__Arith* Alloc<syntax_asdl::loc__Arith, syntax…  2000    2.24
# A tibble: 5 × 3
  func_name                                                            n percent
  <chr>                                                            <int>   <dbl>
1 value_asdl::value__Proc* Alloc<value_asdl::value__Proc, BigStr*…     1 0.00112
2 word_eval::CompletionWordEvaluator* Alloc<word_eval::Completion…     1 0.00112
3 word_eval::NormalWordEvaluator* Alloc<word_eval::NormalWordEval…     1 0.00112
4 word_eval::TildeEvaluator* Alloc<word_eval::TildeEvaluator, sta…     1 0.00112
5 word_parse::WordParser* Alloc<word_parse::WordParser, parse_lib…     1 0.00112

89,463 typed allocs, including 41,733 List<T>
55.99% 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   314         314    1.76
 2       2  2366        2680   15.1 
 3       3  3615        6295   35.4 
 4       4  4076       10371   58.3 
 5       5  1036       11407   64.1 
 6       6  1025       12432   69.8 
 7       7    53       12485   70.1 
 8       8  1059       13544   76.1 
 9       9  4045       17589   98.8 
10      10    32       17621   99.0 
11      11    17       17638   99.1 
12      12    29       17667   99.3 
13      13    26       17693   99.4 
14      14    17       17710   99.5 
15      15     7       17717   99.5 
16      16    10       17727   99.6 
# A tibble: 5 × 4
  str_len     n n_less_than percent
    <int> <int>       <int>   <dbl>
1     134     1       17794    100.
2     202     1       17795    100.
3     255     1       17796    100.
4    1024     1       17797    100.
5    4096     2       17799    100 

17,799 string allocations, total length = 102,508, total bytes = 405,091

11.14% of allocs are strings
6.43% of bytes are strings

NewSlab()
  Lengths
# A tibble: 6 × 4
  slab_len     n n_less_than percent
     <int> <int>       <int>   <dbl>
1        5 36660       36660    69.8
2        7  3078       39738    75.7
3        8  1043       40781    77.7
4       10  3153       43934    83.7
5       14    78       44012    83.8
6       15  2064       46076    87.7
# A tibble: 5 × 4
  slab_len     n n_less_than percent
     <int> <int>       <int>   <dbl>
1      127    11       52472    99.9
2      128    36       52508   100. 
3      254     1       52509   100. 
4      256     6       52515   100. 
5     1022     2       52517   100  

  Slab Types
# A tibble: 6 × 2
  func_name                                                                    n
  <chr>                                                                    <int>
1 Slab<BigStr*>* NewSlab<BigStr*>(int)                                     18191
2 Slab<runtime_asdl::part_value_t*>* NewSlab<runtime_asdl::part_value_t*>…  8010
3 Slab<int>* NewSlab<int>(int)                                              7695
4 Slab<syntax_asdl::CompoundWord*>* NewSlab<syntax_asdl::CompoundWord*>(i…  5033
5 Slab<List<runtime_asdl::Piece*>*>* NewSlab<List<runtime_asdl::Piece*>*>…  3004
6 Slab<runtime_asdl::Piece*>* NewSlab<runtime_asdl::Piece*>(int)            3003
# A tibble: 5 × 2
  func_name                                                                    n
  <chr>                                                                    <int>
1 Slab<syntax_asdl::loc_t*>* NewSlab<syntax_asdl::loc_t*>(int)                 1
2 Slab<value_asdl::regex_match_t*>* NewSlab<value_asdl::regex_match_t*>(i…     1
3 Slab<value_asdl::value__Dict*>* NewSlab<value_asdl::value__Dict*>(int)       1
4 Slab<value_asdl::value__Proc*>* NewSlab<value_asdl::value__Proc*>(int)       1
5 Slab<vm::_AssignBuiltin*>* NewSlab<vm::_AssignBuiltin*>(int)                 1

52,517 slabs, total items = 515,191
32.87% 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     9           9  0.00954
 2         1 46591       46600 49.4    
 3         2 13221       59821 63.4    
 4         3 10027       69848 74.1    
 5         4 11087       80935 85.8    
 6         5  5048       85983 91.2    
 7         6  3056       89039 94.4    
 8         7  1017       90056 95.5    
 9         8  2035       92091 97.7    
10         9  1013       93104 98.7    
11        10     8       93112 98.7    
12        11    46       93158 98.8    
13        12     7       93165 98.8    
14        13     5       93170 98.8    
15        14     6       93176 98.8    
# A tibble: 5 × 4
  num_items     n n_less_than percent
      <int> <int>       <int>   <dbl>
1        63     1       94285    100.
2        64     5       94290    100.
3       113     2       94292    100.
4       179     1       94293    100.
5      1022     2       94295    100 

94,295 reserve() calls, total items = 245,555

Untyped: 159,779
Typed + Str + Slab: 159,779