This change dispatches assignments of strings which length is known at compile time and smaller than min_cap to an inlined assign_in_place() method. This allows the compiler to fully optimize the assignment, removing outline memcpy calls, resulting in up to 6X speed ups for small string assignments.
BM_StringAssignAsciiz_Empty_Transparent 7.30ns ± 0% 1.01ns ± 0% -86.19% (p=0.008 n=5+5)
BM_StringAssignAsciiz_Small_Opaque 10.9ns ± 0% 9.9ns ± 0% -9.06% (p=0.008 n=5+5)
BM_StringAssignAsciiz_Small_Transparent 9.92ns ± 0% 1.33ns ± 0% -86.61% (p=0.008 n=5+5)
BM_StringAssignAsciiz_Large_Opaque 33.7ns ± 0% 30.2ns ± 1% -10.21% (p=0.008 n=5+5)
BM_StringAssignAsciiz_Large_Transparent 30.8ns ± 0% 27.2ns ± 0% -11.53% (p=0.008 n=5+5)
BM_StringAssignAsciiz_Huge_Opaque 388ns ± 4% 391ns ± 3% ~ (p=1.000 n=5+5)
BM_StringAssignAsciiz_Huge_Transparent 385ns ± 4% 388ns ± 3% ~ (p=1.000 n=5+5)
BM_StringAssignAsciizMix_Opaque 15.9ns ± 0% 14.1ns ± 0% -11.62% (p=0.008 n=5+5)
BM_StringAssignAsciizMix_Transparent 15.4ns ± 0% 7.5ns ± 1% -50.97% (p=0.008 n=5+5)