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 7875 12002 10.8 7 18 17141 29143 26.3 8 19 807 29950 27.0 9 20 1502 31452 28.4 10 21 711 32163 29.0 11 22 519 32682 29.5 12 23 580 33262 30.0 13 24 29985 63247 57.0 14 25 2569 65816 59.3 15 26 1709 67525 60.9 16 27 184 67709 61.1 17 28 159 67868 61.2 18 29 157 68025 61.3 19 30 122 68147 61.4 20 31 104 68251 61.5 21 32 5307 73558 66.3 22 33 341 73899 66.6 # A tibble: 5 × 4 obj_len n n_less_than percent <int> <int> <int> <dbl> 1 1024 8 110894 100. 2 1032 6 110900 100. 3 1041 1 110901 100. 4 4096 2 110903 100. 5 4113 2 110905 100 Common Sizes # A tibble: 8 × 2 obj_len n <int> <int> 1 24 29985 2 48 21588 3 18 17141 4 16 7875 5 32 5307 6 40 4771 7 64 3420 8 9 3042 110,905 total allocations, total bytes = 3,939,138 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.56 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.08 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,388 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 16805 16805 58.0 2 7 3045 19850 68.5 3 8 1531 21381 73.8 4 10 1156 22537 77.8 5 14 349 22886 79.0 6 15 2423 25309 87.4 # A tibble: 5 × 4 slab_len n n_less_than percent <int> <int> <int> <dbl> 1 127 11 28916 99.8 2 128 36 28952 100. 3 254 1 28953 100. 4 256 6 28959 100. 5 1022 2 28961 100 Slab Types # A tibble: 6 × 2 func_name n <chr> <int> 1 Slab<BigStr*>* NewSlab<BigStr*>(int) 9576 2 Slab<int>* NewSlab<int>(int) 5677 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) 2433 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,961 slabs, total items = 300,281 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 18677 18682 28.5 3 2 7001 25683 39.1 4 3 5722 31405 47.9 5 4 3314 34719 52.9 6 5 3244 37963 57.9 7 6 3353 41316 63.0 8 7 2515 43831 66.8 9 8 3136 46967 71.6 10 9 1799 48766 74.3 11 10 1998 50764 77.4 12 11 1003 51767 78.9 13 12 857 52624 80.2 14 13 829 53453 81.5 15 14 740 54193 82.6 # A tibble: 5 × 4 num_items n n_less_than percent <int> <int> <int> <dbl> 1 77 15 65593 100. 2 78 8 65601 100. 3 113 2 65603 100. 4 179 1 65604 100. 5 1022 2 65606 100 65,606 reserve() calls, total items = 616,854 Untyped: 110,905 Typed + Str + Slab: 111,180