4x faster strlen with 4 char sentinel

Sebastiaan Koppe via Digitalmars-d-announce digitalmars-d-announce at puremagic.com
Tue Jun 28 02:31:46 PDT 2016


On Tuesday, 28 June 2016 at 01:53:22 UTC, deadalnix wrote:
> On Sunday, 26 June 2016 at 16:40:08 UTC, Jay Norwood wrote:
>> After watching Andre's sentinel thing, I'm playing with strlen 
>> on char strings with 4 terminating 0s instead of a single one.
>>  Seems to work and is 4x faster compared to the runtime 
>> version.
>>
>> nothrow pure size_t strlen2(const(char)* c) {
>>  if (c is null)
>>    return 0;
>>  size_t l=0;
>>  while (*c){ c+=4; l+=4;}
>>  while (*c==0){ c--; l--;}
>>  return l+1;
>> }
>>
>> This is the timing of my test case, which I can post if anyone 
>> is interested.
>> strlen\Release>strlen
>> 2738
>> 681
>
> If we were in interview, I'd ask you "what does this returns if 
> you pass it an empty string ?"

Since no one is answering:

It depends on the memory right before c. But if there is at least 
one 0 right before it - which is quite likely - then you get some 
crazy big number returned.


More information about the Digitalmars-d-announce mailing list