Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 16 Jul 2010 10:03:54 +0200
From:      =?utf-8?Q?Dag-Erling_Sm=C3=B8rgrav?= <des@des.no>
To:        d@delphij.net
Cc:        "deeptech71@gmail.com" <deeptech71@gmail.com>, freebsd-chat@freebsd.org
Subject:   Re: is strlen()'s read-4-bytes-ahead a standard?
Message-ID:  <868w5bkg45.fsf@ds4.des.no>
In-Reply-To: <4C3F8F2E.9080705@delphij.net> (Xin LI's message of "Thu, 15 Jul 2010 15:43:58 -0700")
References:  <AANLkTima5e5pXRrLkOP-3vzHrXWawhDOyP25xgHBPqw_@mail.gmail.com> <4C3F8F2E.9080705@delphij.net>

next in thread | previous in thread | raw e-mail | index | archive | help
Xin LI <delphij@delphij.net> writes:
> deeptech71@gmail.com writes:
> > Some C implementations use the read-4-bytes-ahead technique to speed
> > up strlen(). Does the C standard state anything about strlen() being
> > allowed to read past the terminating zero?
> It's not 4-bytes-ahead, but read a whole (aligned) word at one time.
> I think C standard does not dictate in this detail.

My guess is that it invokes undefined behavior, but it doesn't matter in
practice, because as long as you only read one aligned word at a time,
and as long as the pointer you got is valid and points to a properly
terminated string, you might read trash (which is expected), but you
will never read unmapped memory.

DES
--=20
Dag-Erling Sm=C3=B8rgrav - des@des.no



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?868w5bkg45.fsf>