On Tue, 30 Mar 2010 14:20:01 -0500, Barry Smith <bsmith at mcs.anl.gov> wrote: > > On Mar 30, 2010, at 12:55 PM, William Gropp wrote: > > > As long as you have a flat address space, this trick works. The > > problem is (was) for systems with memory segments; in that case, > > &realarray[-1] might not be valid. > > Bill, > > So is it then a question of using &something[invalidindex] that > is the only problem? We never do this in PETSc; we only do, for > example, a -= mstart; that is add or subtract to an already existing > valid address. Of course a[0] may now be invalid, but then the code is > written so those invalid indices are never used. > > In other words replace > > int *array = &realarray[-1]; > with > int *array = &realarray[0]; > array--; now use array[1] > Is the second form any more "valid" or "legal" then the first form? Or > are they equally "wrong".
These are equivalent(ly wrong) because a[i] == *(a+i) == i[a]. I've never run code on a platform with segmented memory, are there any PETSc users that do? I would expect you'd have seen petsc-maints about this if there were. Jed
