Percentage of allocs less than 48 bytes: 90.8 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 14755 16802 10.5 6 18 312 17114 10.7 7 19 2366 19480 12.2 8 20 3615 23095 14.5 9 21 4076 27171 17.0 10 22 1036 28207 17.7 11 23 1025 29232 18.3 12 24 51147 80379 50.3 13 25 1058 81437 51.0 14 26 4045 85482 53.5 15 27 32 85514 53.5 16 28 26 85540 53.5 17 29 29 85569 53.6 18 30 26 85595 53.6 19 31 17 85612 53.6 20 32 14255 99867 62.5 21 33 10 99877 62.5 22 34 3 99880 62.5 # A tibble: 5 × 4 obj_len n n_less_than percent <int> <int> <int> <dbl> 1 1024 8 159741 100. 2 1032 6 159747 100. 3 1041 1 159748 100. 4 4096 2 159750 100. 5 4113 2 159752 100 Common Sizes # A tibble: 8 × 2 obj_len n <int> <int> 1 24 51147 2 48 42982 3 16 14755 4 32 14255 5 64 4166 6 21 4076 7 26 4045 8 20 3615 159,752 total allocations, total bytes = 6,335,948 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.96 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,445 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 312 312 1.75 2 2 2366 2678 15.0 3 3 3615 6293 35.4 4 4 4076 10369 58.3 5 5 1036 11405 64.1 6 6 1025 12430 69.8 7 7 53 12483 70.1 8 8 1058 13541 76.1 9 9 4045 17586 98.8 10 10 32 17618 99.0 11 11 17 17635 99.1 12 12 29 17664 99.3 13 13 26 17690 99.4 14 14 17 17707 99.5 15 15 7 17714 99.5 16 16 10 17724 99.6 # A tibble: 5 × 4 str_len n n_less_than percent <int> <int> <int> <dbl> 1 134 1 17791 100. 2 202 1 17792 100. 3 255 1 17793 100. 4 1024 1 17794 100. 5 4096 2 17796 100 17,796 string allocations, total length = 102,498, total bytes = 405,030 11.14% of allocs are strings 6.39% 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 45 93155 98.8 13 12 7 93162 98.8 14 13 5 93167 98.8 15 14 6 93173 98.8 # A tibble: 5 × 4 num_items n n_less_than percent <int> <int> <int> <dbl> 1 63 1 94282 100. 2 64 5 94287 100. 3 111 2 94289 100. 4 179 1 94290 100. 5 1022 2 94292 100 94,292 reserve() calls, total items = 245,533 Untyped: 159,752 Typed + Str + Slab: 159,752