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   314       17116 10.7   
 7      19  2366       19482 12.2   
 8      20  3615       23097 14.5   
 9      21  4076       27173 17.0   
10      22  1036       28209 17.7   
11      23  1025       29234 18.3   
12      24 51148       80382 50.3   
13      25  1059       81441 51.0   
14      26  4045       85486 53.5   
15      27    32       85518 53.5   
16      28    26       85544 53.5   
17      29    29       85573 53.6   
18      30    26       85599 53.6   
19      31    17       85616 53.6   
20      32 14255       99871 62.5   
21      33    10       99881 62.5   
22      34     3       99884 62.5   
# A tibble: 5 × 4
  obj_len     n n_less_than percent
    <int> <int>       <int>   <dbl>
1    1024     8      159745    100.
2    1032     6      159751    100.
3    1041     1      159752    100.
4    4096     2      159754    100.
5    4113     2      159756    100 

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

    159,756 total allocations, total bytes = 6,336,041

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,446 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       112     2       94290    100.
4       179     1       94291    100.
5      1022     2       94293    100 

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

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