Commit d89658a
committed
Add ref-counted string slices
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 d89658a
4 files changed
+147
-22
lines changed| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
545 | 545 | | |
546 | 546 | | |
547 | 547 | | |
548 | | - | |
| 548 | + | |
| 549 | + | |
| 550 | + | |
| 551 | + | |
| 552 | + | |
| 553 | + | |
549 | 554 | | |
550 | 555 | | |
551 | 556 | | |
| |||
554 | 559 | | |
555 | 560 | | |
556 | 561 | | |
557 | | - | |
| 562 | + | |
| 563 | + | |
558 | 564 | | |
559 | 565 | | |
560 | 566 | | |
| |||
563 | 569 | | |
564 | 570 | | |
565 | 571 | | |
| 572 | + | |
| 573 | + | |
| 574 | + | |
| 575 | + | |
| 576 | + | |
566 | 577 | | |
567 | 578 | | |
568 | | - | |
| 579 | + | |
| 580 | + | |
| 581 | + | |
| 582 | + | |
| 583 | + | |
| 584 | + | |
| 585 | + | |
| 586 | + | |
| 587 | + | |
| 588 | + | |
| 589 | + | |
569 | 590 | | |
570 | 591 | | |
571 | 592 | | |
572 | 593 | | |
573 | | - | |
| 594 | + | |
| 595 | + | |
| 596 | + | |
| 597 | + | |
| 598 | + | |
| 599 | + | |
| 600 | + | |
| 601 | + | |
| 602 | + | |
| 603 | + | |
| 604 | + | |
574 | 605 | | |
575 | 606 | | |
576 | 607 | | |
| |||
2049 | 2080 | | |
2050 | 2081 | | |
2051 | 2082 | | |
| 2083 | + | |
2052 | 2084 | | |
2053 | 2085 | | |
2054 | 2086 | | |
| |||
2069 | 2101 | | |
2070 | 2102 | | |
2071 | 2103 | | |
| 2104 | + | |
| 2105 | + | |
2072 | 2106 | | |
2073 | 2107 | | |
2074 | 2108 | | |
2075 | | - | |
2076 | | - | |
2077 | | - | |
2078 | | - | |
| 2109 | + | |
| 2110 | + | |
| 2111 | + | |
| 2112 | + | |
| 2113 | + | |
| 2114 | + | |
| 2115 | + | |
| 2116 | + | |
| 2117 | + | |
2079 | 2118 | | |
2080 | | - | |
| 2119 | + | |
2081 | 2120 | | |
2082 | | - | |
| 2121 | + | |
| 2122 | + | |
| 2123 | + | |
2083 | 2124 | | |
| 2125 | + | |
2084 | 2126 | | |
2085 | 2127 | | |
2086 | 2128 | | |
| |||
2962 | 3004 | | |
2963 | 3005 | | |
2964 | 3006 | | |
| 3007 | + | |
2965 | 3008 | | |
2966 | 3009 | | |
2967 | 3010 | | |
| |||
2976 | 3019 | | |
2977 | 3020 | | |
2978 | 3021 | | |
| 3022 | + | |
2979 | 3023 | | |
2980 | 3024 | | |
2981 | 3025 | | |
| |||
3680 | 3724 | | |
3681 | 3725 | | |
3682 | 3726 | | |
3683 | | - | |
| 3727 | + | |
| 3728 | + | |
| 3729 | + | |
| 3730 | + | |
| 3731 | + | |
3684 | 3732 | | |
3685 | 3733 | | |
3686 | 3734 | | |
3687 | 3735 | | |
3688 | 3736 | | |
3689 | 3737 | | |
| 3738 | + | |
| 3739 | + | |
| 3740 | + | |
| 3741 | + | |
| 3742 | + | |
| 3743 | + | |
| 3744 | + | |
| 3745 | + | |
| 3746 | + | |
| 3747 | + | |
| 3748 | + | |
| 3749 | + | |
| 3750 | + | |
| 3751 | + | |
| 3752 | + | |
| 3753 | + | |
| 3754 | + | |
| 3755 | + | |
| 3756 | + | |
| 3757 | + | |
| 3758 | + | |
| 3759 | + | |
3690 | 3760 | | |
3691 | 3761 | | |
3692 | 3762 | | |
| |||
5750 | 5820 | | |
5751 | 5821 | | |
5752 | 5822 | | |
5753 | | - | |
5754 | | - | |
5755 | | - | |
5756 | | - | |
5757 | | - | |
5758 | | - | |
5759 | | - | |
5760 | | - | |
5761 | | - | |
5762 | | - | |
5763 | | - | |
| 5823 | + | |
5764 | 5824 | | |
5765 | 5825 | | |
5766 | 5826 | | |
| |||
58038 | 58098 | | |
58039 | 58099 | | |
58040 | 58100 | | |
| 58101 | + | |
| 58102 | + | |
| 58103 | + | |
| 58104 | + | |
| 58105 | + | |
| 58106 | + | |
| 58107 | + | |
58041 | 58108 | | |
58042 | 58109 | | |
58043 | 58110 | | |
| |||
| 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