lat@druil.UUCP (TepperL) (06/25/85)
It has been pointed out that multi-dimensional arrays will cause
integer multiplies to be implicitly performed, but that most
programs do not use multi-dimensional arrays, so that it
would be OK to not use them.
But what about arrays of structures? These too will cause implicit
multiplies when referenced as below:
blotto[i].xyzzy = 21;
I know, I know, in C you should assign a structure pointer to
&blotto[i] and all that, but not everyone writes code that way,
and shouldn't have to either.
Significant or not, you will find arrays like these a lot more
often.
--
Larry Tepper {ihnp4 | allegra}!druil!lat +1-303-538-1759guy@sun.uucp (Guy Harris) (06/26/85)
> But what about arrays of structures? These too will cause implicit > multiplies when referenced as below: > > blotto[i].xyzzy = 21; > > I know, I know, in C you should assign a structure pointer to > &blotto[i] and all that, Besides, computing &blotto[i] and assigning it to a pointer *still* requires a multiplication; it merely means that if you manipulate several elements of blotto[i] in a row, or perform several operations on blotto[i].xyzzy, or both, you can do the computation once and reuse the result. If you're cycling through the array "blotto", a strength reduction will (again) eliminate the multiplication (the compiler would also have to do the trick of saving &blotto[i] in a pointer for you). I've seen exactly that sort of code in something that at least purported to be generated by DEC's PDP-11 Fortran IV compiler (not F4P, but the threaded code compiler - it was a binary of "zork"). Guy Harris