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 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 51151       80384 50.3   
13      25  1059       81443 51.0   
14      26  4045       85488 53.5   
15      27    32       85520 53.5   
16      28    26       85546 53.5   
17      29    29       85575 53.6   
18      30    26       85601 53.6   
19      31    17       85618 53.6   
20      32 14255       99873 62.5   
21      33    10       99883 62.5   
22      34     3       99886 62.5   
# A tibble: 5 × 4
  obj_len     n n_less_than percent
    <int> <int>       <int>   <dbl>
1    1024     8      159747    100.
2    1032     6      159753    100.
3    1041     1      159754    100.
4    4096     2      159756    100.
5    4113     2      159758    100 

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

    159,758 total allocations, total bytes = 6,304,009

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,448 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 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::Dict_*>* NewSlab<value_asdl::Dict_*>(int)                   1
3 Slab<value_asdl::regex_match_t*>* NewSlab<value_asdl::regex_match_t*>(i…     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,758
Typed + Str + Slab: 159,758