Percentage of allocs less than 48 bytes: 91.1

All allocations
# A tibble: 22 × 4
   obj_len     n n_less_than percent
     <int> <int>       <int>   <dbl>
 1       9  3042        3042    2.74
 2      10    73        3115    2.81
 3      11  1002        4117    3.71
 4      12     9        4126    3.72
 5      13     1        4127    3.72
 6      16  7869       11996   10.8 
 7      18 17141       29137   26.3 
 8      19   807       29944   27.0 
 9      20  1502       31446   28.4 
10      21   711       32157   29.0 
11      22   519       32676   29.5 
12      23   580       33256   30.0 
13      24 29985       63241   57.0 
14      25  2569       65810   59.3 
15      26  1709       67519   60.9 
16      27   184       67703   61.1 
17      28   159       67862   61.2 
18      29   157       68019   61.3 
19      30   122       68141   61.4 
20      31   104       68245   61.5 
21      32  5307       73552   66.3 
22      33   341       73893   66.6 
# A tibble: 5 × 4
  obj_len     n n_less_than percent
    <int> <int>       <int>   <dbl>
1    1024     8      110881    100.
2    1032     6      110887    100.
3    1041     1      110888    100.
4    4096     2      110890    100.
5    4113     2      110892    100 

Common Sizes
# A tibble: 8 × 2
  obj_len     n
    <int> <int>
1      24 29985
2      48 21585
3      18 17141
4      16  7869
5      32  5307
6      40  4770
7      64  3418
8       9  3042

    110,892 total allocations, total bytes = 3,938,658

Typed allocations
# A tibble: 20 × 3
   func_name                                                           n percent
   <chr>                                                           <int>   <dbl>
 1 List<BigStr*>* Alloc<List<BigStr*>>()                            6457   12.1 
 2 runtime_asdl::Piece* Alloc<runtime_asdl::Piece, BigStr*, bool&…  4353    8.15
 3 List<runtime_asdl::part_value_t*>* Alloc<List<runtime_asdl::pa…  3518    6.59
 4 runtime_asdl::CommandStatus* Alloc<runtime_asdl::CommandStatus…  2971    5.57
 5 value_asdl::value__Bool* Alloc<value_asdl::value__Bool, bool&>…  2738    5.13
 6 Tuple2<runtime_asdl::span_e, int>* Alloc<Tuple2<runtime_asdl::…  2733    5.12
 7 runtime_asdl::Piece* Alloc<runtime_asdl::Piece, BigStr*&, bool…  1925    3.61
 8 List<syntax_asdl::CompoundWord*>* Alloc<List<syntax_asdl::Comp…  1659    3.11
 9 value_asdl::value__Str* Alloc<value_asdl::value__Str, BigStr*>…  1647    3.09
10 List<int>* Alloc<List<int>>()                                    1080    2.02
11 runtime_asdl::VarSubState* Alloc<runtime_asdl::VarSubState, bo…  1002    1.88
12 List<runtime_asdl::Piece*>* Alloc<List<runtime_asdl::Piece*>>()   956    1.79
13 runtime_asdl::Piece* Alloc<runtime_asdl::Piece, BigStr*&, bool…   925    1.73
14 Dict<BigStr*, value_asdl::value_t*>* Alloc<Dict<BigStr*, value…   908    1.70
15 Dict<BigStr*, args::_Action*>* Alloc<Dict<BigStr*, args::_Acti…   906    1.70
16 List<Tuple2<BigStr*, bool>*>* Alloc<List<Tuple2<BigStr*, bool>…   906    1.70
17 args::SetToInt* Alloc<args::SetToInt, BigStr*>(BigStr*&&)         901    1.69
18 value_asdl::value__Int* Alloc<value_asdl::value__Int, int&>(in…   901    1.69
19 value_asdl::value__Str* Alloc<value_asdl::value__Str, BigStr*&…   871    1.63
20 args::SetToString* Alloc<args::SetToString, BigStr*, bool, Lis…   766    1.43
# A tibble: 5 × 3
  func_name                                                            n percent
  <chr>                                                            <int>   <dbl>
1 value_asdl::value__List* Alloc<value_asdl::value__List, List<va…     1 0.00187
2 value_asdl::value__List* Alloc<value_asdl::value__List, List<va…     1 0.00187
3 word_eval::CompletionWordEvaluator* Alloc<word_eval::Completion…     1 0.00187
4 word_eval::NormalWordEvaluator* Alloc<word_eval::NormalWordEval…     1 0.00187
5 word_eval::TildeEvaluator* Alloc<word_eval::TildeEvaluator, sta…     1 0.00187

53,381 typed allocs, including 18,242 List<T>
48.14% of allocs are typed

Str - NewStr() and OverAllocatedStr()
# A tibble: 16 × 4
   str_len     n n_less_than percent
     <int> <int>       <int>   <dbl>
 1       0   275         275   0.954
 2       1 17141       17416  60.4  
 3       2   807       18223  63.2  
 4       3  1429       19652  68.2  
 5       4   711       20363  70.6  
 6       5   519       20882  72.4  
 7       6   580       21462  74.4  
 8       7   493       21955  76.2  
 9       8  2569       24524  85.1  
10       9  1709       26233  91.0  
11      10   184       26417  91.6  
12      11   152       26569  92.2  
13      12   157       26726  92.7  
14      13   122       26848  93.1  
15      14   104       26952  93.5  
16      15    77       27029  93.7  
# A tibble: 5 × 4
  str_len     n n_less_than percent
    <int> <int>       <int>   <dbl>
1     160     1       28826    100.
2     202     1       28827    100.
3     255     1       28828    100.
4    1024     1       28829    100.
5    4096     2       28831    100 

28,831 string allocations, total length = 149,639, total bytes = 639,766

26.00% of allocs are strings
16.24% of bytes are strings

NewSlab()
  Lengths
# A tibble: 6 × 4
  slab_len     n n_less_than percent
     <int> <int>       <int>   <dbl>
1        5 16803       16803    58.0
2        7  3043       19846    68.5
3        8  1530       21376    73.8
4       10  1156       22532    77.8
5       14   349       22881    79.0
6       15  2423       25304    87.4
# A tibble: 5 × 4
  slab_len     n n_less_than percent
     <int> <int>       <int>   <dbl>
1      127    11       28910    99.8
2      128    36       28946   100. 
3      254     1       28947   100. 
4      256     6       28953   100. 
5     1022     2       28955   100  

  Slab Types
# A tibble: 6 × 2
  func_name                                                                    n
  <chr>                                                                    <int>
1 Slab<BigStr*>* NewSlab<BigStr*>(int)                                      9574
2 Slab<int>* NewSlab<int>(int)                                              5675
3 Slab<runtime_asdl::part_value_t*>* NewSlab<runtime_asdl::part_value_t*>…  4129
4 Slab<value_asdl::value_t*>* NewSlab<value_asdl::value_t*>(int)            2430
5 Slab<syntax_asdl::CompoundWord*>* NewSlab<syntax_asdl::CompoundWord*>(i…  1778
6 Slab<runtime_asdl::Piece*>* NewSlab<runtime_asdl::Piece*>(int)             956
# A tibble: 5 × 2
  func_name                                                                    n
  <chr>                                                                    <int>
1 Slab<syntax_asdl::printf_part_t*>* NewSlab<syntax_asdl::printf_part_t*>…     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

28,955 slabs, total items = 300,233
26.11% 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     5           5  0.00762
 2         1 18676       18681 28.5    
 3         2  7001       25682 39.1    
 4         3  5722       31404 47.9    
 5         4  3314       34718 52.9    
 6         5  3244       37962 57.9    
 7         6  3352       41314 63.0    
 8         7  2515       43829 66.8    
 9         8  3136       46965 71.6    
10         9  1799       48764 74.3    
11        10  1998       50762 77.4    
12        11  1003       51765 78.9    
13        12   857       52622 80.2    
14        13   829       53451 81.5    
15        14   740       54191 82.6    
# A tibble: 5 × 4
  num_items     n n_less_than percent
      <int> <int>       <int>   <dbl>
1        77    15       65591    100.
2        78     8       65599    100.
3       113     2       65601    100.
4       179     1       65602    100.
5      1022     2       65604    100 

65,604 reserve() calls, total items = 616,847

Untyped: 110,892
Typed + Str + Slab: 111,167