Mark, In the specific case of the namestrcpy () function, it will copy a maximum of 64 bytes, but the length of the source string is unknown. I would have to think that memcpy () would certainly win if you knew the source and destination sizes etc. Perhaps there are some places like that in the code that don't use memcpy () currently?
David -----Original Message----- From: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED] Sent: Wednesday, September 27, 2006 4:27 PM To: Strong, David Cc: email@example.com Subject: Re: [HACKERS] Faster StrNCpy On Wed, Sep 27, 2006 at 07:08:05AM -0700, Strong, David wrote: > We sometimes see TupleDescInitEntry () taking high CPU times via > OProfile. This does include, amongst a lot of other code, a call to > namestrcpy () which in turn calls StrNCpy (). Perhaps this is not a > good candidate right now as a name string is only 64 bytes. Just wondering - are any of these cases where a memcpy() would work just as well? Or are you not sure that the source string is at least 64 bytes in length? memcpy(&target, &source, sizeof(target)); target[sizeof(target)-1] = '\0'; I imagine any extra checking causes processor stalls, or at least for the branch prediction to fill up? Straight copies might allow for maximum parallelism? If it's only 64 bytes, on processors such as Pentium or Athlon, that's 2 or 4 cache lines, and writes are always performed as cache lines. I haven't seen the code that you and Tom are looking at to tell whether it is safe to do this or not. Cheers, mark -- [EMAIL PROTECTED] / [EMAIL PROTECTED] / [EMAIL PROTECTED] __________________________ . . _ ._ . . .__ . . ._. .__ . . . .__ | Neighbourhood Coder |\/| |_| |_| |/ |_ |\/| | |_ | |/ |_ | | | | | | \ | \ |__ . | | .|. |__ |__ | \ |__ | Ottawa, Ontario, Canada One ring to rule them all, one ring to find them, one ring to bring them all and in the darkness bind them... http://mark.mielke.cc/ ---------------------------(end of broadcast)--------------------------- TIP 1: if posting/reading through Usenet, please send an appropriate subscribe-nomail command to [EMAIL PROTECTED] so that your message can get through to the mailing list cleanly