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 14755       16802 10.5   
 6      18   312       17114 10.7   
 7      19  2366       19480 12.2   
 8      20  3615       23095 14.5   
 9      21  4076       27171 17.0   
10      22  1036       28207 17.7   
11      23  1025       29232 18.3   
12      24 51147       80379 50.3   
13      25  1058       81437 51.0   
14      26  4045       85482 53.5   
15      27    32       85514 53.5   
16      28    26       85540 53.5   
17      29    29       85569 53.6   
18      30    26       85595 53.6   
19      31    17       85612 53.6   
20      32 14255       99867 62.5   
21      33    10       99877 62.5   
22      34     3       99880 62.5   
# A tibble: 5 × 4
  obj_len     n n_less_than percent
    <int> <int>       <int>   <dbl>
1    1024     8      159741    100.
2    1032     6      159747    100.
3    1041     1      159748    100.
4    4096     2      159750    100.
5    4113     2      159752    100 

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

    159,752 total allocations, total bytes = 6,335,948

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,445 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   312         312    1.75
 2       2  2366        2678   15.0 
 3       3  3615        6293   35.4 
 4       4  4076       10369   58.3 
 5       5  1036       11405   64.1 
 6       6  1025       12430   69.8 
 7       7    53       12483   70.1 
 8       8  1058       13541   76.1 
 9       9  4045       17586   98.8 
10      10    32       17618   99.0 
11      11    17       17635   99.1 
12      12    29       17664   99.3 
13      13    26       17690   99.4 
14      14    17       17707   99.5 
15      15     7       17714   99.5 
16      16    10       17724   99.6 
# A tibble: 5 × 4
  str_len     n n_less_than percent
    <int> <int>       <int>   <dbl>
1     134     1       17791    100.
2     202     1       17792    100.
3     255     1       17793    100.
4    1024     1       17794    100.
5    4096     2       17796    100 

17,796 string allocations, total length = 102,498, total bytes = 405,030

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    45       93155 98.8    
13        12     7       93162 98.8    
14        13     5       93167 98.8    
15        14     6       93173 98.8    
# A tibble: 5 × 4
  num_items     n n_less_than percent
      <int> <int>       <int>   <dbl>
1        63     1       94282    100.
2        64     5       94287    100.
3       111     2       94289    100.
4       179     1       94290    100.
5      1022     2       94292    100 

94,292 reserve() calls, total items = 245,533

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