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 314 17116 10.7 7 19 2366 19482 12.2 8 20 3615 23097 14.5 9 21 4076 27173 17.0 10 22 1036 28209 17.7 11 23 1025 29234 18.3 12 24 51148 80382 50.3 13 25 1059 81441 51.0 14 26 4045 85486 53.5 15 27 32 85518 53.5 16 28 26 85544 53.5 17 29 29 85573 53.6 18 30 26 85599 53.6 19 31 17 85616 53.6 20 32 14255 99871 62.5 21 33 10 99881 62.5 22 34 3 99884 62.5 # A tibble: 5 × 4 obj_len n n_less_than percent <int> <int> <int> <dbl> 1 1024 8 159745 100. 2 1032 6 159751 100. 3 1041 1 159752 100. 4 4096 2 159754 100. 5 4113 2 159756 100 Common Sizes # A tibble: 8 × 2 obj_len n <int> <int> 1 24 51148 2 48 42982 3 16 14755 4 32 14255 5 64 4166 6 21 4076 7 26 4045 8 20 3615 159,756 total allocations, total bytes = 6,336,041 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,446 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.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 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 112 2 94290 100. 4 179 1 94291 100. 5 1022 2 94293 100 94,293 reserve() calls, total items = 245,546 Untyped: 159,756 Typed + Str + Slab: 159,756