Percentage of allocs less than 48 bytes: 97.4

All allocations
# A tibble: 22 × 4
   obj_len     n n_less_than percent
     <int> <int>       <int>   <dbl>
 1       9    37          37  0.0591
 2      10    10          47  0.0751
 3      11  1814        1861  2.97  
 4      12     1        1862  2.97  
 5      16  8939       10801 17.3   
 6      18   731       11532 18.4   
 7      19  2852       14384 23.0   
 8      20    67       14451 23.1   
 9      21   100       14551 23.2   
10      22    82       14633 23.4   
11      23    77       14710 23.5   
12      24 21836       36546 58.4   
13      25    96       36642 58.5   
14      26   100       36742 58.7   
15      27    95       36837 58.9   
16      28    24       36861 58.9   
17      29    28       36889 58.9   
18      30    24       36913 59.0   
19      31    14       36927 59.0   
20      32  7178       44105 70.5   
21      33    12       44117 70.5   
22      34     2       44119 70.5   
# A tibble: 5 × 4
  obj_len     n n_less_than percent
    <int> <int>       <int>   <dbl>
1    1024     8       62581    100.
2    1032     6       62587    100.
3    1041     1       62588    100.
4    4096     2       62590    100.
5    4113     2       62592    100 

Common Sizes
# A tibble: 8 × 2
  obj_len     n
    <int> <int>
1      24 21836
2      48 15742
3      16  8939
4      32  7178
5      19  2852
6      11  1814
7      64  1076
8      40  1056

    62,592 total allocations, total bytes = 1,999,685

Typed allocations
# A tibble: 20 × 3
   func_name                                                           n percent
   <chr>                                                           <int>   <dbl>
 1 List<BigStr*>* Alloc<List<BigStr*>>()                            4658   11.2 
 2 List<runtime_asdl::part_value_t*>* Alloc<List<runtime_asdl::pa…  4086    9.86
 3 runtime_asdl::CommandStatus* Alloc<runtime_asdl::CommandStatus…  3186    7.69
 4 value_asdl::value__Str* Alloc<value_asdl::value__Str, BigStr*>…  2227    5.37
 5 syntax_asdl::word__String* Alloc<syntax_asdl::word__String, in…  1844    4.45
 6 runtime_asdl::Piece* Alloc<runtime_asdl::Piece, BigStr*&, bool…  1814    4.38
 7 runtime_asdl::VarSubState* Alloc<runtime_asdl::VarSubState, bo…  1814    4.38
 8 value_asdl::LeftName* Alloc<value_asdl::LeftName, BigStr*&, sy…  1803    4.35
 9 syntax_asdl::loc__Arith* Alloc<syntax_asdl::loc__Arith, syntax…  1780    4.30
10 value_asdl::value__Str* Alloc<value_asdl::value__Str, BigStr*&…   998    2.41
11 List<syntax_asdl::CompoundWord*>* Alloc<List<syntax_asdl::Comp…   981    2.37
12 List<int>* Alloc<List<int>>()                                     956    2.31
13 mylib::BufWriter* Alloc<mylib::BufWriter>()                       945    2.28
14 List<List<runtime_asdl::Piece*>*>* Alloc<List<List<runtime_asd…   932    2.25
15 List<Tuple2<runtime_asdl::span_e, int>*>* Alloc<List<Tuple2<ru…   932    2.25
16 List<mylib::BufWriter*>* Alloc<List<mylib::BufWriter*>>()         932    2.25
17 List<runtime_asdl::Piece*>* Alloc<List<runtime_asdl::Piece*>>()   932    2.25
18 Tuple2<runtime_asdl::span_e, int>* Alloc<Tuple2<runtime_asdl::…   932    2.25
19 syntax_asdl::loc__Word* Alloc<syntax_asdl::loc__Word, syntax_a…   922    2.23
20 runtime_asdl::Piece* Alloc<runtime_asdl::Piece, BigStr*, bool&…   890    2.15
# 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.00241
2 word_eval::CompletionWordEvaluator* Alloc<word_eval::Completion…     1 0.00241
3 word_eval::NormalWordEvaluator* Alloc<word_eval::NormalWordEval…     1 0.00241
4 word_eval::TildeEvaluator* Alloc<word_eval::TildeEvaluator, sta…     1 0.00241
5 word_parse::WordParser* Alloc<word_parse::WordParser, parse_lib…     1 0.00241

41,434 typed allocs, including 16,385 List<T>
66.20% 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   731         731    16.3
 2       2  2852        3583    79.9
 3       3    67        3650    81.4
 4       4   100        3750    83.6
 5       5    82        3832    85.5
 6       6    77        3909    87.2
 7       7   104        4013    89.5
 8       8    96        4109    91.7
 9       9   100        4209    93.9
10      10    95        4304    96.0
11      11    17        4321    96.4
12      12    28        4349    97.0
13      13    24        4373    97.5
14      14    14        4387    97.9
15      15     9        4396    98.1
16      16    12        4408    98.3
# A tibble: 5 × 4
  str_len     n n_less_than percent
    <int> <int>       <int>   <dbl>
1     134     1        4478    99.9
2     202     1        4479    99.9
3     255     1        4480    99.9
4    1024     1        4481   100. 
5    4096     2        4483   100  

4,483 string allocations, total length = 24,715, total bytes = 100,926

7.16% of allocs are strings
5.05% of bytes are strings

NewSlab()
  Lengths
# A tibble: 6 × 4
  slab_len     n n_less_than percent
     <int> <int>       <int>   <dbl>
1        5 13988       13988    83.9
2        7   527       14515    87.0
3        8    51       14566    87.4
4       10  1086       15652    93.9
5       14    78       15730    94.3
6       15    53       15783    94.7
# A tibble: 5 × 4
  slab_len     n n_less_than percent
     <int> <int>       <int>   <dbl>
1      127    11       16630    99.7
2      128    36       16666    99.9
3      254     1       16667   100. 
4      256     6       16673   100. 
5     1022     2       16675   100  

  Slab Types
# A tibble: 6 × 2
  func_name                                                                    n
  <chr>                                                                    <int>
1 Slab<BigStr*>* NewSlab<BigStr*>(int)                                      4747
2 Slab<runtime_asdl::part_value_t*>* NewSlab<runtime_asdl::part_value_t*>…  4086
3 Slab<int>* NewSlab<int>(int)                                              1626
4 Slab<syntax_asdl::CompoundWord*>* NewSlab<syntax_asdl::CompoundWord*>(i…  1422
5 Slab<List<runtime_asdl::Piece*>*>* NewSlab<List<runtime_asdl::Piece*>*>…   932
6 Slab<Tuple2<runtime_asdl::span_e, int>*>* NewSlab<Tuple2<runtime_asdl::…   932
# A tibble: 5 × 2
  func_name                                                                    n
  <chr>                                                                    <int>
1 Slab<syntax_asdl::debug_frame_t*>* NewSlab<syntax_asdl::debug_frame_t*>…     1
2 Slab<syntax_asdl::loc_t*>* NewSlab<syntax_asdl::loc_t*>(int)                 1
3 Slab<value_asdl::regex_match_t*>* NewSlab<value_asdl::regex_match_t*>(i…     1
4 Slab<value_asdl::value__Dict*>* NewSlab<value_asdl::value__Dict*>(int)       1
5 Slab<vm::_AssignBuiltin*>* NewSlab<vm::_AssignBuiltin*>(int)                 1

16,675 slabs, total items = 129,371
26.64% 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.0154
 2         1 20653       20658 63.5   
 3         2  4247       24905 76.6   
 4         3  1684       26589 81.8   
 5         4  2401       28990 89.1   
 6         5  2724       31714 97.5   
 7         6   520       32234 99.1   
 8         7    25       32259 99.2   
 9         8    39       32298 99.3   
10         9    21       32319 99.4   
11        10    19       32338 99.4   
12        11    47       32385 99.6   
13        12     8       32393 99.6   
14        13     6       32399 99.6   
15        14     7       32406 99.7   
# A tibble: 5 × 4
  num_items     n n_less_than percent
      <int> <int>       <int>   <dbl>
1        63     1       32509    100.
2        64     5       32514    100.
3       113     2       32516    100.
4       179     1       32517    100.
5      1022     2       32519    100 

32,519 reserve() calls, total items = 67,191

Untyped: 62,592
Typed + Str + Slab: 62,592