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 14759       16806 10.5   
 6      18   314       17120 10.7   
 7      19  2366       19486 12.2   
 8      20  3615       23101 14.5   
 9      21  4076       27177 17.0   
10      22  1036       28213 17.7   
11      23  1025       29238 18.3   
12      24 51154       80392 50.3   
13      25  1059       81451 51.0   
14      26  4045       85496 53.5   
15      27    32       85528 53.5   
16      28    26       85554 53.5   
17      29    29       85583 53.6   
18      30    26       85609 53.6   
19      31    17       85626 53.6   
20      32 14255       99881 62.5   
21      33    10       99891 62.5   
22      34     3       99894 62.5   
# A tibble: 5 × 4
  obj_len     n n_less_than percent
    <int> <int>       <int>   <dbl>
1    1024     8      159755    100.
2    1032     6      159761    100.
3    1041     1      159762    100.
4    4096     2      159764    100.
5    4113     2      159766    100 

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

    159,766 total allocations, total bytes = 6,304,161

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,456 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::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,766
Typed + Str + Slab: 159,766