Percentage of allocs less than 32 bytes: 76.8 All allocations # A tibble: 22 x 4 obj_len n n_less_than percent <int> <int> <int> <dbl> 1 9 8095 8095 4.14 2 10 1002 9097 4.65 3 12 538 9635 4.93 4 13 1 9636 4.93 5 14 52107 61743 31.6 6 15 1465 63208 32.3 7 16 11378 74586 38.2 8 17 3182 77768 39.8 9 18 514 78282 40.1 10 19 866 79148 40.5 11 20 487 79635 40.7 12 21 1894 81529 41.7 13 22 356 81885 41.9 14 23 217 82102 42.0 15 24 57728 139830 71.5 16 25 236 140066 71.7 17 26 135 140201 71.7 18 27 110 140311 71.8 19 28 298 140609 71.9 20 29 340 140949 72.1 21 30 77 141026 72.2 22 31 106 141132 72.2 # A tibble: 5 x 4 obj_len n n_less_than percent <int> <int> <int> <dbl> 1 1032 7 195425 100. 2 2056 1 195426 100. 3 4104 3 195429 100. 4 4109 2 195431 100. 5 8200 1 195432 100 Common Sizes # A tibble: 8 x 2 obj_len n <int> <int> 1 24 57728 2 14 52107 3 40 32626 4 16 11378 5 32 8931 6 9 8095 7 72 6972 8 17 3182 195,432 total allocations, total bytes = 5,417,329 Typed allocations # A tibble: 20 x 3 func_name n percent <chr> <int> <dbl> 1 List<Str*>* Alloc<List<Str*>>() 10080 11.2 2 runtime_asdl::part_value__String* Alloc<runtime_asdl::part_val~ 6531 7.25 3 List<runtime_asdl::part_value_t*>* Alloc<List<runtime_asdl::pa~ 5543 6.15 4 syntax_asdl::loc__Missing* Alloc<syntax_asdl::loc__Missing>() 3695 4.10 5 Tuple2<runtime_asdl::span_e, int>* Alloc<Tuple2<runtime_asdl::~ 3561 3.95 6 List<process::Process*>* Alloc<List<process::Process*>>() 2971 3.30 7 List<process::_RedirFrame*>* Alloc<List<process::_RedirFrame*>~ 2971 3.30 8 process::_FdFrame* Alloc<process::_FdFrame>() 2971 3.30 9 List<runtime_asdl::redirect*>* Alloc<List<runtime_asdl::redire~ 2970 3.30 10 executor::_ProcessSubFrame* Alloc<executor::_ProcessSubFrame>() 2970 3.30 11 runtime_asdl::CommandStatus* Alloc<runtime_asdl::CommandStatus~ 2970 3.30 12 runtime_asdl::StatusArray* Alloc<runtime_asdl::StatusArray, de~ 2970 3.30 13 runtime_asdl::value__Bool* Alloc<runtime_asdl::value__Bool, bo~ 2654 2.95 14 runtime_asdl::value__Str* Alloc<runtime_asdl::value__Str, Str*~ 1860 2.06 15 List<Tuple3<Str*, bool, bool>*>* Alloc<List<Tuple3<Str*, bool,~ 1855 2.06 16 syntax_asdl::loc__Word* Alloc<syntax_asdl::loc__Word, syntax_a~ 1663 1.85 17 List<List<Tuple3<Str*, bool, bool>*>*>* Alloc<List<List<Tuple3~ 1505 1.67 18 mylib::BufWriter* Alloc<mylib::BufWriter>() 1444 1.60 19 runtime_asdl::value__Undef* Alloc<runtime_asdl::value__Undef>() 1438 1.60 20 Tuple3<Str*, bool, bool>* Alloc<Tuple3<Str*, bool, bool>, Str*~ 1428 1.58 # A tibble: 5 x 3 func_name n percent <chr> <int> <dbl> 1 ui::ErrorFormatter* Alloc<ui::ErrorFormatter, alloc::Arena*&>(a~ 1 0.00111 2 util::DebugFile* Alloc<util::DebugFile, mylib::Writer*>(mylib::~ 1 0.00111 3 util::NullDebugFile* Alloc<util::NullDebugFile>() 1 0.00111 4 word_eval::NormalWordEvaluator* Alloc<word_eval::NormalWordEval~ 1 0.00111 5 word_eval::TildeEvaluator* Alloc<word_eval::TildeEvaluator, sta~ 1 0.00111 90,105 typed allocs, including 36,413 List<T> 46.11% 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 0 265 265 0.403 2 1 52107 52372 79.6 3 2 1465 53837 81.8 4 3 1720 55557 84.4 5 4 3182 58739 89.3 6 5 514 59253 90.1 7 6 866 60119 91.4 8 7 486 60605 92.1 9 8 1894 62499 95.0 10 9 356 62855 95.5 11 10 217 63072 95.9 12 11 161 63233 96.1 13 12 236 63469 96.5 14 13 135 63604 96.7 15 14 110 63714 96.8 16 15 298 64012 97.3 # A tibble: 5 x 4 str_len n n_less_than percent <int> <int> <int> <dbl> 1 136 1 65785 100. 2 137 1 65786 100. 3 144 1 65787 100. 4 196 1 65788 100. 5 4096 2 65790 100 65,790 string allocations, total length = 182,748, total bytes = 1,038,018 33.66% of allocs are strings 19.16% of bytes are strings NewSlab() Lengths # A tibble: 6 x 4 slab_len n n_less_than percent <int> <int> <int> <dbl> 1 2 4815 4815 12.1 2 3 22429 27244 68.4 3 6 4315 31559 79.3 4 7 3071 34630 87.0 5 14 2611 37241 93.6 6 15 881 38122 95.8 # A tibble: 5 x 4 slab_len n n_less_than percent <int> <int> <int> <dbl> 1 254 1 39797 100. 2 255 1 39798 100. 3 511 1 39799 100. 4 1022 2 39801 100. 5 1023 1 39802 100 Slab Types # A tibble: 6 x 2 func_name n <chr> <int> 1 Slab<Str*>* NewSlab<Str*>(int) 15066 2 Slab<runtime_asdl::part_value_t*>* NewSlab<runtime_asdl::part_value_t*>~ 5996 3 Slab<int>* NewSlab<int>(int) 5273 4 Slab<runtime_asdl::value_t*>* NewSlab<runtime_asdl::value_t*>(int) 2418 5 Slab<Tuple3<Str*, bool, bool>*>* NewSlab<Tuple3<Str*, bool, bool>*>(int) 1855 6 Slab<List<Tuple3<Str*, bool, bool>*>*>* NewSlab<List<Tuple3<Str*, bool,~ 1579 # A tibble: 5 x 2 func_name n <chr> <int> 1 Slab<runtime_asdl::redirect*>* NewSlab<runtime_asdl::redirect*>(int) 1 2 Slab<split::IfsSplitter*>* NewSlab<split::IfsSplitter*>(int) 1 3 Slab<syntax_asdl::if_arm*>* NewSlab<syntax_asdl::if_arm*>(int) 1 4 Slab<syntax_asdl::printf_part_t*>* NewSlab<syntax_asdl::printf_part_t*>~ 1 5 Slab<void*>* NewSlab<void*>(int) 1 39,802 slabs, total items = 244,056 20.37% 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.00120 2 1 26000 26001 31.2 3 2 8422 34423 41.4 4 3 6838 41261 49.6 5 4 4770 46031 55.3 6 5 3338 49369 59.3 7 6 3006 52375 62.9 8 7 3209 55584 66.8 9 8 2998 58582 70.4 10 9 3051 61633 74.1 11 10 2658 64291 77.2 12 11 1692 65983 79.3 13 12 1582 67565 81.2 14 13 1485 69050 83.0 15 14 860 69910 84.0 # A tibble: 5 x 4 num_items n n_less_than percent <int> <int> <int> <dbl> 1 563 1 83225 100. 2 564 1 83226 100. 3 565 1 83227 100. 4 566 1 83228 100. 5 1022 2 83230 100 83,230 reserve() calls, total items = 891,554 Untyped: 195,432 Typed + Str + Slab: 195,697