Commit 08db51a
authored
Add ref-counted string slices (#1175)
Instead of copying long substring slices, store a reference to and
offset into the parent string.
Gets more profitable as strings get longer. For 64k string slices,
it's about 6.5x faster than copying.
The downside of ref-counted string slices is that they can keep the
parent string alive for longer than it otherwise would have been,
leading to memory usage that is higher than without string slices.
That's why this optimization is only applied to long-ish slices,
currently slices > 1,024 bytes.
Possible future enhancements are slicing only when the substring
is > x% of the parent string, or copying lazily when the slice
string is the only thing referencing the parent string.1 parent 0721419 commit 08db51a
4 files changed
+148
-22
lines changed| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
211 | 211 | | |
212 | 212 | | |
213 | 213 | | |
| 214 | + | |
| 215 | + | |
| 216 | + | |
214 | 217 | | |
215 | 218 | | |
216 | 219 | | |
| |||
545 | 548 | | |
546 | 549 | | |
547 | 550 | | |
548 | | - | |
| 551 | + | |
| 552 | + | |
| 553 | + | |
| 554 | + | |
| 555 | + | |
| 556 | + | |
549 | 557 | | |
550 | 558 | | |
551 | 559 | | |
| |||
554 | 562 | | |
555 | 563 | | |
556 | 564 | | |
557 | | - | |
| 565 | + | |
| 566 | + | |
558 | 567 | | |
559 | 568 | | |
560 | 569 | | |
| |||
563 | 572 | | |
564 | 573 | | |
565 | 574 | | |
| 575 | + | |
| 576 | + | |
| 577 | + | |
| 578 | + | |
| 579 | + | |
566 | 580 | | |
567 | 581 | | |
568 | | - | |
| 582 | + | |
| 583 | + | |
| 584 | + | |
| 585 | + | |
| 586 | + | |
| 587 | + | |
| 588 | + | |
| 589 | + | |
| 590 | + | |
| 591 | + | |
| 592 | + | |
569 | 593 | | |
570 | 594 | | |
571 | 595 | | |
572 | 596 | | |
573 | | - | |
| 597 | + | |
| 598 | + | |
| 599 | + | |
| 600 | + | |
| 601 | + | |
| 602 | + | |
| 603 | + | |
| 604 | + | |
| 605 | + | |
| 606 | + | |
| 607 | + | |
574 | 608 | | |
575 | 609 | | |
576 | 610 | | |
| |||
2049 | 2083 | | |
2050 | 2084 | | |
2051 | 2085 | | |
| 2086 | + | |
2052 | 2087 | | |
2053 | 2088 | | |
2054 | 2089 | | |
| |||
2069 | 2104 | | |
2070 | 2105 | | |
2071 | 2106 | | |
| 2107 | + | |
| 2108 | + | |
2072 | 2109 | | |
2073 | 2110 | | |
2074 | 2111 | | |
2075 | | - | |
2076 | | - | |
2077 | | - | |
2078 | | - | |
| 2112 | + | |
| 2113 | + | |
| 2114 | + | |
| 2115 | + | |
| 2116 | + | |
| 2117 | + | |
| 2118 | + | |
| 2119 | + | |
| 2120 | + | |
2079 | 2121 | | |
2080 | | - | |
| 2122 | + | |
2081 | 2123 | | |
2082 | | - | |
| 2124 | + | |
| 2125 | + | |
| 2126 | + | |
2083 | 2127 | | |
| 2128 | + | |
2084 | 2129 | | |
2085 | 2130 | | |
2086 | 2131 | | |
| |||
2962 | 3007 | | |
2963 | 3008 | | |
2964 | 3009 | | |
| 3010 | + | |
2965 | 3011 | | |
2966 | 3012 | | |
2967 | 3013 | | |
| |||
2976 | 3022 | | |
2977 | 3023 | | |
2978 | 3024 | | |
| 3025 | + | |
2979 | 3026 | | |
2980 | 3027 | | |
2981 | 3028 | | |
| |||
3680 | 3727 | | |
3681 | 3728 | | |
3682 | 3729 | | |
3683 | | - | |
| 3730 | + | |
| 3731 | + | |
| 3732 | + | |
| 3733 | + | |
| 3734 | + | |
3684 | 3735 | | |
3685 | 3736 | | |
3686 | 3737 | | |
3687 | 3738 | | |
3688 | 3739 | | |
3689 | 3740 | | |
| 3741 | + | |
| 3742 | + | |
| 3743 | + | |
| 3744 | + | |
| 3745 | + | |
| 3746 | + | |
| 3747 | + | |
| 3748 | + | |
| 3749 | + | |
| 3750 | + | |
| 3751 | + | |
| 3752 | + | |
| 3753 | + | |
| 3754 | + | |
| 3755 | + | |
| 3756 | + | |
| 3757 | + | |
| 3758 | + | |
| 3759 | + | |
| 3760 | + | |
3690 | 3761 | | |
3691 | 3762 | | |
3692 | 3763 | | |
| |||
5750 | 5821 | | |
5751 | 5822 | | |
5752 | 5823 | | |
5753 | | - | |
5754 | | - | |
5755 | | - | |
5756 | | - | |
5757 | | - | |
5758 | | - | |
5759 | | - | |
5760 | | - | |
5761 | | - | |
5762 | | - | |
5763 | | - | |
| 5824 | + | |
5764 | 5825 | | |
5765 | 5826 | | |
5766 | 5827 | | |
| |||
58038 | 58099 | | |
58039 | 58100 | | |
58040 | 58101 | | |
| 58102 | + | |
| 58103 | + | |
| 58104 | + | |
| 58105 | + | |
| 58106 | + | |
| 58107 | + | |
| 58108 | + | |
58041 | 58109 | | |
58042 | 58110 | | |
58043 | 58111 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
1700 | 1700 | | |
1701 | 1701 | | |
1702 | 1702 | | |
| 1703 | + | |
| 1704 | + | |
| 1705 | + | |
| 1706 | + | |
| 1707 | + | |
| 1708 | + | |
| 1709 | + | |
| 1710 | + | |
| 1711 | + | |
| 1712 | + | |
| 1713 | + | |
| 1714 | + | |
| 1715 | + | |
1703 | 1716 | | |
1704 | 1717 | | |
1705 | 1718 | | |
| 1719 | + | |
1706 | 1720 | | |
1707 | 1721 | | |
1708 | 1722 | | |
1709 | 1723 | | |
1710 | 1724 | | |
1711 | 1725 | | |
| 1726 | + | |
| 1727 | + | |
| 1728 | + | |
1712 | 1729 | | |
1713 | 1730 | | |
1714 | 1731 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
797 | 797 | | |
798 | 798 | | |
799 | 799 | | |
| 800 | + | |
| 801 | + | |
| 802 | + | |
| 803 | + | |
| 804 | + | |
| 805 | + | |
| 806 | + | |
| 807 | + | |
| 808 | + | |
| 809 | + | |
| 810 | + | |
| 811 | + | |
| 812 | + | |
| 813 | + | |
| 814 | + | |
| 815 | + | |
| 816 | + | |
| 817 | + | |
| 818 | + | |
| 819 | + | |
| 820 | + | |
| 821 | + | |
| 822 | + | |
| 823 | + | |
| 824 | + | |
| 825 | + | |
| 826 | + | |
| 827 | + | |
| 828 | + | |
| 829 | + | |
| 830 | + | |
| 831 | + | |
| 832 | + | |
800 | 833 | | |
801 | 834 | | |
802 | 835 | | |
| |||
1114 | 1147 | | |
1115 | 1148 | | |
1116 | 1149 | | |
| 1150 | + | |
| 1151 | + | |
| 1152 | + | |
1117 | 1153 | | |
1118 | 1154 | | |
1119 | 1155 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
378 | 378 | | |
379 | 379 | | |
380 | 380 | | |
| 381 | + | |
| 382 | + | |
| 383 | + | |
| 384 | + | |
| 385 | + | |
381 | 386 | | |
382 | 387 | | |
383 | 388 | | |
| |||
0 commit comments