Percentage of allocs less than 32 bytes: 78.6 All allocations # A tibble: 22 x 4 obj_len n n_less_than percent <int> <int> <int> <dbl> 1 9 4157 4157 3.18 2 10 1824 5981 4.58 3 12 892 6873 5.26 4 14 17571 24444 18.7 5 15 2464 26908 20.6 6 16 10915 37823 29.0 7 17 1458 39281 30.1 8 18 29 39310 30.1 9 19 481 39791 30.5 10 20 38 39829 30.5 11 21 523 40352 30.9 12 22 47 40399 30.9 13 23 94 40493 31.0 14 24 51496 91989 70.4 15 25 32 92021 70.4 16 26 911 92932 71.1 17 27 21 92953 71.2 18 28 5 92958 71.2 19 29 9 92967 71.2 20 30 1 92968 71.2 21 31 10 92978 71.2 22 32 9741 102719 78.6 # A tibble: 5 x 4 obj_len n n_less_than percent <int> <int> <int> <dbl> 1 520 19 130616 100. 2 1032 7 130623 100. 3 2056 1 130624 100. 4 4104 2 130626 100. 5 4109 2 130628 100 Common Sizes # A tibble: 8 x 2 obj_len n <int> <int> 1 24 51496 2 40 24901 3 14 17571 4 16 10915 5 32 9741 6 9 4157 7 15 2464 8 72 2110 130,628 total allocations, total bytes = 3,421,575 Typed allocations # A tibble: 20 x 3 func_name n percent <chr> <int> <dbl> 1 List<Str*>* Alloc<List<Str*>>() 8402 10.7 2 List<runtime_asdl::part_value_t*>* Alloc<List<runtime_asdl::pa~ 5981 7.60 3 syntax_asdl::loc__Missing* Alloc<syntax_asdl::loc__Missing>() 4120 5.24 4 List<process::Process*>* Alloc<List<process::Process*>>() 3187 4.05 5 List<process::_RedirFrame*>* Alloc<List<process::_RedirFrame*>~ 3187 4.05 6 process::_FdFrame* Alloc<process::_FdFrame>() 3187 4.05 7 List<runtime_asdl::redirect*>* Alloc<List<runtime_asdl::redire~ 3186 4.05 8 executor::_ProcessSubFrame* Alloc<executor::_ProcessSubFrame>() 3186 4.05 9 runtime_asdl::CommandStatus* Alloc<runtime_asdl::CommandStatus~ 3186 4.05 10 runtime_asdl::StatusArray* Alloc<runtime_asdl::StatusArray, de~ 3186 4.05 11 syntax_asdl::loc__Word* Alloc<syntax_asdl::loc__Word, syntax_a~ 2314 2.94 12 runtime_asdl::value__Str* Alloc<runtime_asdl::value__Str, Str*~ 2257 2.87 13 mylib::BufWriter* Alloc<mylib::BufWriter>() 1866 2.37 14 List<List<Tuple3<Str*, bool, bool>*>*>* Alloc<List<List<Tuple3~ 1864 2.37 15 List<Tuple2<runtime_asdl::span_e, int>*>* Alloc<List<Tuple2<ru~ 1864 2.37 16 List<Tuple3<Str*, bool, bool>*>* Alloc<List<Tuple3<Str*, bool,~ 1864 2.37 17 List<mylib::BufWriter*>* Alloc<List<mylib::BufWriter*>>() 1864 2.37 18 Tuple2<runtime_asdl::span_e, int>* Alloc<Tuple2<runtime_asdl::~ 1864 2.37 19 Tuple3<Str*, bool, bool>* Alloc<Tuple3<Str*, bool, bool>, Str*~ 1864 2.37 20 syntax_asdl::word__String* Alloc<syntax_asdl::word__String, in~ 1844 2.34 # A tibble: 5 x 3 func_name n percent <chr> <int> <dbl> 1 util::DebugFile* Alloc<util::DebugFile, mylib::Writer*>(mylib::~ 1 0.00127 2 util::NullDebugFile* Alloc<util::NullDebugFile>() 1 0.00127 3 word_eval::NormalWordEvaluator* Alloc<word_eval::NormalWordEval~ 1 0.00127 4 word_eval::TildeEvaluator* Alloc<word_eval::TildeEvaluator, sta~ 1 0.00127 5 word_parse::WordParser* Alloc<word_parse::WordParser, parse_lib~ 1 0.00127 78,660 typed allocs, including 34,906 List<T> 60.22% of allocs are typed Str - NewStr() and OverAllocatedStr() # A tibble: 16 x 4 str_len n n_less_than percent <int> <int> <int> <dbl> 1 1 17571 17571 69.8 2 2 2464 20035 79.6 3 3 1400 21435 85.1 4 4 1458 22893 90.9 5 5 29 22922 91.0 6 6 481 23403 93.0 7 7 38 23441 93.1 8 8 523 23964 95.2 9 9 47 24011 95.4 10 10 94 24105 95.7 11 11 27 24132 95.9 12 12 32 24164 96.0 13 13 911 25075 99.6 14 14 21 25096 99.7 15 15 5 25101 99.7 16 16 9 25110 99.7 # A tibble: 5 x 4 str_len n n_less_than percent <int> <int> <int> <dbl> 1 113 1 25171 100. 2 134 1 25172 100. 3 137 1 25173 100. 4 196 1 25174 100. 5 4096 2 25176 100 25,176 string allocations, total length = 65,138, total bytes = 392,426 19.27% of allocs are strings 11.47% of bytes are strings NewSlab() Lengths # A tibble: 6 x 4 slab_len n n_less_than percent <int> <int> <int> <dbl> 1 2 372 372 1.39 2 3 23313 23685 88.4 3 6 243 23928 89.3 4 7 1946 25874 96.6 5 14 162 26036 97.2 6 15 26 26062 97.3 # A tibble: 5 x 4 slab_len n n_less_than percent <int> <int> <int> <dbl> 1 126 15 26786 100. 2 127 2 26788 100. 3 254 1 26789 100. 4 255 1 26790 100. 5 1022 2 26792 100 Slab Types # A tibble: 6 x 2 func_name n <chr> <int> 1 Slab<Str*>* NewSlab<Str*>(int) 9402 2 Slab<runtime_asdl::part_value_t*>* NewSlab<runtime_asdl::part_value_t*>~ 5981 3 Slab<List<Tuple3<Str*, bool, bool>*>*>* NewSlab<List<Tuple3<Str*, bool,~ 1864 4 Slab<Tuple2<runtime_asdl::span_e, int>*>* NewSlab<Tuple2<runtime_asdl::~ 1864 5 Slab<Tuple3<Str*, bool, bool>*>* NewSlab<Tuple3<Str*, bool, bool>*>(int) 1864 6 Slab<mylib::BufWriter*>* NewSlab<mylib::BufWriter*>(int) 1864 # A tibble: 5 x 2 func_name n <chr> <int> 1 Slab<runtime_asdl::hay_node*>* NewSlab<runtime_asdl::hay_node*>(int) 1 2 Slab<split::IfsSplitter*>* NewSlab<split::IfsSplitter*>(int) 1 3 Slab<state::DebugFrame*>* NewSlab<state::DebugFrame*>(int) 1 4 Slab<state::_ArgFrame*>* NewSlab<state::_ArgFrame*>(int) 1 5 Slab<void*>* NewSlab<void*>(int) 1 26,792 slabs, total items = 115,300 20.51% of allocs are slabs ::reserve(int n) Num Items # A tibble: 15 x 4 num_items n n_less_than percent <int> <int> <int> <dbl> 1 0 1 1 0.00242 2 1 24753 24754 59.8 3 2 3537 28291 68.4 4 3 2589 30880 74.6 5 4 2954 33834 81.8 6 5 3212 37046 89.5 7 6 2299 39345 95.1 8 7 81 39426 95.3 9 8 73 39499 95.4 10 9 73 39572 95.6 11 10 69 39641 95.8 12 11 54 39695 95.9 13 12 53 39748 96.0 14 13 51 39799 96.2 15 14 51 39850 96.3 # A tibble: 5 x 4 num_items n n_less_than percent <int> <int> <int> <dbl> 1 171 1 41381 100. 2 172 1 41382 100. 3 173 1 41383 100. 4 198 1 41384 100. 5 1022 2 41386 100 41,386 reserve() calls, total items = 152,781 Untyped: 130,628 Typed + Str + Slab: 130,628