Percentage of allocs less than 32 bytes: 78.6

All allocations
# A tibble: 22 x 4
   obj_len     n n_less_than percent
     <int> <int>       <int>   <dbl>
 1       9  4157        4157    3.18
 2      10  1824        5981    4.58
 3      12   892        6873    5.26
 4      14 17571       24444   18.7 
 5      15  2464       26908   20.6 
 6      16 10915       37823   29.0 
 7      17  1458       39281   30.1 
 8      18    29       39310   30.1 
 9      19   481       39791   30.5 
10      20    38       39829   30.5 
11      21   523       40352   30.9 
12      22    47       40399   30.9 
13      23    94       40493   31.0 
14      24 51496       91989   70.4 
15      25    32       92021   70.4 
16      26   911       92932   71.1 
17      27    21       92953   71.2 
18      28     5       92958   71.2 
19      29     9       92967   71.2 
20      30     1       92968   71.2 
21      31    10       92978   71.2 
22      32  9741      102719   78.6 
# A tibble: 5 x 4
  obj_len     n n_less_than percent
    <int> <int>       <int>   <dbl>
1     520    19      130616    100.
2    1032     7      130623    100.
3    2056     1      130624    100.
4    4104     2      130626    100.
5    4109     2      130628    100 

Common Sizes
# A tibble: 8 x 2
  obj_len     n
    <int> <int>
1      24 51496
2      40 24901
3      14 17571
4      16 10915
5      32  9741
6       9  4157
7      15  2464
8      72  2110

    130,628 total allocations, total bytes = 3,421,575

Typed allocations
# A tibble: 20 x 3
   func_name                                                           n percent
   <chr>                                                           <int>   <dbl>
 1 List<Str*>* Alloc<List<Str*>>()                                  8402   10.7 
 2 List<runtime_asdl::part_value_t*>* Alloc<List<runtime_asdl::pa~  5981    7.60
 3 syntax_asdl::loc__Missing* Alloc<syntax_asdl::loc__Missing>()    4120    5.24
 4 List<process::Process*>* Alloc<List<process::Process*>>()        3187    4.05
 5 List<process::_RedirFrame*>* Alloc<List<process::_RedirFrame*>~  3187    4.05
 6 process::_FdFrame* Alloc<process::_FdFrame>()                    3187    4.05
 7 List<runtime_asdl::redirect*>* Alloc<List<runtime_asdl::redire~  3186    4.05
 8 executor::_ProcessSubFrame* Alloc<executor::_ProcessSubFrame>()  3186    4.05
 9 runtime_asdl::CommandStatus* Alloc<runtime_asdl::CommandStatus~  3186    4.05
10 runtime_asdl::StatusArray* Alloc<runtime_asdl::StatusArray, de~  3186    4.05
11 syntax_asdl::loc__Word* Alloc<syntax_asdl::loc__Word, syntax_a~  2314    2.94
12 runtime_asdl::value__Str* Alloc<runtime_asdl::value__Str, Str*~  2257    2.87
13 mylib::BufWriter* Alloc<mylib::BufWriter>()                      1866    2.37
14 List<List<Tuple3<Str*, bool, bool>*>*>* Alloc<List<List<Tuple3~  1864    2.37
15 List<Tuple2<runtime_asdl::span_e, int>*>* Alloc<List<Tuple2<ru~  1864    2.37
16 List<Tuple3<Str*, bool, bool>*>* Alloc<List<Tuple3<Str*, bool,~  1864    2.37
17 List<mylib::BufWriter*>* Alloc<List<mylib::BufWriter*>>()        1864    2.37
18 Tuple2<runtime_asdl::span_e, int>* Alloc<Tuple2<runtime_asdl::~  1864    2.37
19 Tuple3<Str*, bool, bool>* Alloc<Tuple3<Str*, bool, bool>, Str*~  1864    2.37
20 syntax_asdl::word__String* Alloc<syntax_asdl::word__String, in~  1844    2.34
# A tibble: 5 x 3
  func_name                                                            n percent
  <chr>                                                            <int>   <dbl>
1 util::DebugFile* Alloc<util::DebugFile, mylib::Writer*>(mylib::~     1 0.00127
2 util::NullDebugFile* Alloc<util::NullDebugFile>()                    1 0.00127
3 word_eval::NormalWordEvaluator* Alloc<word_eval::NormalWordEval~     1 0.00127
4 word_eval::TildeEvaluator* Alloc<word_eval::TildeEvaluator, sta~     1 0.00127
5 word_parse::WordParser* Alloc<word_parse::WordParser, parse_lib~     1 0.00127

78,660 typed allocs, including 34,906 List<T>
60.22% of allocs are typed

Str - NewStr() and OverAllocatedStr()
# A tibble: 16 x 4
   str_len     n n_less_than percent
     <int> <int>       <int>   <dbl>
 1       1 17571       17571    69.8
 2       2  2464       20035    79.6
 3       3  1400       21435    85.1
 4       4  1458       22893    90.9
 5       5    29       22922    91.0
 6       6   481       23403    93.0
 7       7    38       23441    93.1
 8       8   523       23964    95.2
 9       9    47       24011    95.4
10      10    94       24105    95.7
11      11    27       24132    95.9
12      12    32       24164    96.0
13      13   911       25075    99.6
14      14    21       25096    99.7
15      15     5       25101    99.7
16      16     9       25110    99.7
# A tibble: 5 x 4
  str_len     n n_less_than percent
    <int> <int>       <int>   <dbl>
1     113     1       25171    100.
2     134     1       25172    100.
3     137     1       25173    100.
4     196     1       25174    100.
5    4096     2       25176    100 

25,176 string allocations, total length = 65,138, total bytes = 392,426

19.27% of allocs are strings
11.47% of bytes are strings

NewSlab()
  Lengths
# A tibble: 6 x 4
  slab_len     n n_less_than percent
     <int> <int>       <int>   <dbl>
1        2   372         372    1.39
2        3 23313       23685   88.4 
3        6   243       23928   89.3 
4        7  1946       25874   96.6 
5       14   162       26036   97.2 
6       15    26       26062   97.3 
# A tibble: 5 x 4
  slab_len     n n_less_than percent
     <int> <int>       <int>   <dbl>
1      126    15       26786    100.
2      127     2       26788    100.
3      254     1       26789    100.
4      255     1       26790    100.
5     1022     2       26792    100 

  Slab Types
# A tibble: 6 x 2
  func_name                                                                    n
  <chr>                                                                    <int>
1 Slab<Str*>* NewSlab<Str*>(int)                                            9402
2 Slab<runtime_asdl::part_value_t*>* NewSlab<runtime_asdl::part_value_t*>~  5981
3 Slab<List<Tuple3<Str*, bool, bool>*>*>* NewSlab<List<Tuple3<Str*, bool,~  1864
4 Slab<Tuple2<runtime_asdl::span_e, int>*>* NewSlab<Tuple2<runtime_asdl::~  1864
5 Slab<Tuple3<Str*, bool, bool>*>* NewSlab<Tuple3<Str*, bool, bool>*>(int)  1864
6 Slab<mylib::BufWriter*>* NewSlab<mylib::BufWriter*>(int)                  1864
# A tibble: 5 x 2
  func_name                                                                n
  <chr>                                                                <int>
1 Slab<runtime_asdl::hay_node*>* NewSlab<runtime_asdl::hay_node*>(int)     1
2 Slab<split::IfsSplitter*>* NewSlab<split::IfsSplitter*>(int)             1
3 Slab<state::DebugFrame*>* NewSlab<state::DebugFrame*>(int)               1
4 Slab<state::_ArgFrame*>* NewSlab<state::_ArgFrame*>(int)                 1
5 Slab<void*>* NewSlab<void*>(int)                                         1

26,792 slabs, total items = 115,300
20.51% of allocs are slabs

::reserve(int n)

  Num Items
# A tibble: 15 x 4
   num_items     n n_less_than  percent
       <int> <int>       <int>    <dbl>
 1         0     1           1  0.00242
 2         1 24753       24754 59.8    
 3         2  3537       28291 68.4    
 4         3  2589       30880 74.6    
 5         4  2954       33834 81.8    
 6         5  3212       37046 89.5    
 7         6  2299       39345 95.1    
 8         7    81       39426 95.3    
 9         8    73       39499 95.4    
10         9    73       39572 95.6    
11        10    69       39641 95.8    
12        11    54       39695 95.9    
13        12    53       39748 96.0    
14        13    51       39799 96.2    
15        14    51       39850 96.3    
# A tibble: 5 x 4
  num_items     n n_less_than percent
      <int> <int>       <int>   <dbl>
1       171     1       41381    100.
2       172     1       41382    100.
3       173     1       41383    100.
4       198     1       41384    100.
5      1022     2       41386    100 

41,386 reserve() calls, total items = 152,781

Untyped: 130,628
Typed + Str + Slab: 130,628