Performance improvement to strnlen().
Václav Zeman
vhaisman at gmail.com
Mon May 27 08:37:42 UTC 2013
On 26 May 2013 21:01, Lee Thomas wrote:
> On 2013-05-26 08:00, Václav Zeman wrote:
>>
>> On 05/25/2013 10:27 PM, Lee Thomas wrote:
>>>
>>> + lp = (const unsigned long *)((uintptr_t)str & ~LONGPTR_MASK);
>>> + va = (*lp - mask01);
>>> + vb = ((~*lp) & mask80);
>>
>> I do not think that this correct C. This is type punning violating the
>> rules of the language.
>
>
> Hello Václav,
>
> The aliasing here is safe, because there are no writes through either of the
> pointers, and the reads are correctly aligned.
I disagree. IANALL but AFAIK, this is simply not allowed by the
language => UB => even though it seems to work in this instance, you
are just lucky the UB is actually doing what you expect.
--
VZ
More information about the freebsd-hackers
mailing list