Small Buffer Optimization for string and friends

Vladimir Panteleev vladimir at thecybershadow.net
Sun Apr 8 02:55:14 PDT 2012


On Sunday, 8 April 2012 at 09:46:28 UTC, Vladimir Panteleev wrote:
> On Sunday, 8 April 2012 at 05:56:36 UTC, Andrei Alexandrescu 
> wrote:
>> Walter and I discussed today about using the small string 
>> optimization in string and other arrays of immutable small 
>> objects.
>>
>> On 64 bit machines, string occupies 16 bytes. We could use the 
>> first byte as discriminator, which means that all strings 
>> under 16 chars need no memory allocation at all.
>
> Don't use the first byte. Use the last byte.
>
> The last byte is the highest-order byte of the length. Limiting 
> arrays to 18.37 exabytes, as opposed to 18.45 exabytes, is a 
> much nicer limitation than making assumptions about the memory 
> layout.

Erm... never mind, I thought the pointer was the first field.

Even so, how would you use the lowest-order byte of the length as 
a discriminator? Unless you allocated bytes 2-8 for the length 
(which would be an unaligned read, or a shift every time...)

"making assumptions about the memory layout" now seems like the 
only solution.

Also, what will be .ptr for such arrays? It can't point inside 
the string, because the type is immutable and the array is on the 
stack. Duplication can be expensive as well.


More information about the Digitalmars-d mailing list