🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: net.lang.c
Article #9359

Re: Re: structure alignment question

#9359
From: Guy Harris
Date: Sun, 21 Sep 1986 22:18
53 lines
2501 bytes
> The last 68000 compiler I used aligned strings on WORD boundaries.
> This would cost one byte per string, half the time. But there was a
> big speed payoff: I could do word operations in my strnlen, strncmp,
> strncpy, and whatever other string processing functions I happened to
> write.

Oh, really?

	char	string1[] = "foo";
	char	string2[] = "xfoo";

	return(strcmp(string1, string2 + 1));

If you can do this with straightforward word operations, and not take a
performance hit relative to byte-by-byte copies, you've got a really clever
"strcmp".  (Hint:  my 68010 manual does *NOT* mention any "swap bytes"
instruction, and the 68010 doesn't have a barrel shifter.)

Furthermore,

	char	string3[128+1];

	strcpy(string3, string1);

would, if it copied a word at a time, have to deal both with words of the
form

	00xx

(when it recognizes a word of that form, it should stop *before* copying it
and stuff a zero byte at the end of the target) and of the form

	xx00

(when it recognizes a word of that form, it should stop *after* copying it).

> All this code ported to a Sun-3 no (apparent) problem, but crashed on a
> Sun-2, because the SUN compiler allocated strings in a totally stingy
> 1-byte alignment.

It would also have crashed on the first example given above *regardless* of
whether the Sun compiler allocated strings on 1-byte or 2-byte boundaries.
If your routines couldn't handle arguments off byte boundaries, I'm sorry,
but they were *not* correct implementations of the string routines!
*!NOTHING*!  guarantees that the arguments to the string routines always
point to the *first* byte of a string.  Furthermore, nothing guarantees that
"strcat" and "strncat" will always do aligned copies, even if the arguments
always point to the first byte of a string; the reason for this should be
obvious.
-- 
	Guy Harris
	{ihnp4, decvax, seismo, decwrl, ...}!sun!guy
	guy@sun.com (or guy@sun.arpa)
Technical Details
Message-ID: <7479@sun.uucp>
Path: arc1-ca.pugleaf.net!utzoo!mnetor!seismo!ut-sally!pyramid!decwrl!sun!guy
References: <101@hcx1.UUCP> <7363@sun.uucp> <696@mips.UUCP> <7447@sun.uucp> <1705@mcc-pp.UUCP>

Show Full Headers
Complete Article Headers
Relay-Version: version B 2.10 5/3/83; site utzoo.UUCP
Path: arc1-ca.pugleaf.net!utzoo!mnetor!seismo!ut-sally!pyramid!decwrl!sun!guy
From: guy@sun.uucp (Guy Harris)
Newsgroups: net.lang.c
Subject: Re: Re: structure alignment question
Message-ID: <7479@sun.uucp>
Date: Sun, 21-Sep-86 18:18:48 EDT
Article-I.D.: sun.7479
Posted: Sun Sep 21 18:18:48 1986
Date-Received: Mon, 22-Sep-86 07:54:33 EDT
References: <101@hcx1.UUCP> <7363@sun.uucp> <696@mips.UUCP> <7447@sun.uucp> <1705@mcc-pp.UUCP>
Organization: Sun Microsystems, Inc.
Lines: 53