Percentage of allocs less than 48 bytes: 90.8

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 14754       16801 10.5   
 6      18   314       17115 10.7   
 7      19  2366       19481 12.2   
 8      20  3615       23096 14.5   
 9      21  4076       27172 17.0   
10      22  1036       28208 17.7   
11      23  1025       29233 18.3   
12      24 51150       80383 50.3   
13      25  1059       81442 51.0   
14      26  4045       85487 53.5   
15      27    32       85519 53.5   
16      28    26       85545 53.5   
17      29    29       85574 53.6   
18      30    26       85600 53.6   
19      31    17       85617 53.6   
20      32 14255       99872 62.5   
21      33    10       99882 62.5   
22      34     3       99885 62.5   
# A tibble: 5 × 4
  obj_len     n n_less_than percent
    <int> <int>       <int>   <dbl>
1    1024     8      159746    100.
2    1032     6      159752    100.
3    1041     1      159753    100.
4    4096     2      159755    100.
5    4113     2      159757    100 

Common Sizes
# A tibble: 8 × 2
  obj_len     n
    <int> <int>
1      24 51150
2      48 42982
3      16 14754
4      32 14255
5      64  4166
6      21  4076
7      26  4045
8      20  3615

    159,757 total allocations, total bytes = 6,336,073

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.96
 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,447 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.39% of bytes are strings

NewSlab()
  Lengths
# A tibble: 6 × 4
  slab_len     n n_less_than percent
     <int> <int>       <int>   <dbl>
1        5 36658       36658    69.8
2        7  3076       39734    75.7
3        8  1042       40776    77.7
4       10  3153       43929    83.7
5       14    78       44007    83.8
6       15  2064       46071    87.7
# A tibble: 5 × 4
  slab_len     n n_less_than percent
     <int> <int>       <int>   <dbl>
1      127    11       52466    99.9
2      128    36       52502   100. 
3      254     1       52503   100. 
4      256     6       52509   100. 
5     1022     2       52511   100  

  Slab Types
# A tibble: 6 × 2
  func_name                                                                    n
  <chr>                                                                    <int>
1 Slab<BigStr*>* NewSlab<BigStr*>(int)                                     18189
2 Slab<runtime_asdl::part_value_t*>* NewSlab<runtime_asdl::part_value_t*>…  8010
3 Slab<int>* NewSlab<int>(int)                                              7693
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,511 slabs, total items = 515,143
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 46590       46599 49.4    
 3         2 13221       59820 63.4    
 4         3 10027       69847 74.1    
 5         4 11087       80934 85.8    
 6         5  5048       85982 91.2    
 7         6  3055       89037 94.4    
 8         7  1017       90054 95.5    
 9         8  2035       92089 97.7    
10         9  1013       93102 98.7    
11        10     8       93110 98.7    
12        11    46       93156 98.8    
13        12     7       93163 98.8    
14        13     5       93168 98.8    
15        14     6       93174 98.8    
# A tibble: 5 × 4
  num_items     n n_less_than percent
      <int> <int>       <int>   <dbl>
1        63     1       94283    100.
2        64     5       94288    100.
3       113     2       94290    100.
4       179     1       94291    100.
5      1022     2       94293    100 

94,293 reserve() calls, total items = 245,548

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