[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: Memory alignment of pointers for sparc64



On Thu, 5 Sep 2002, Bill Moseley wrote:

> About all I understand of this problem is that our code allocates memory
> on 4-byte boundaries, and that cased SIGBUS on this one machine.  I
> printed out the results of malloc() calls and noticed it was always on
> 8-byte boundaries.  Hard-coding to 8-byte fixed our code.

AFAIK on 32 bit SPARC, like you are using (and on other platforms, like
MIPS, etc) you often need to align structures on 8 bytes for floating
point members. doubles have to be aligned on their size generally.

If your structures contains only things <= 32 bits then you can get away
with a 4 byte alignment in general, but if you add a double or a long long
then some arches will demand 8 bytes.

The basic rule is that the member of a structure has to be aligned on it's
size - so a 2 byte short needs to have an addresss congruent to 2, a
4 byte long needs to be congruent to 4, a double to 8.

Generally an allocator of this nature should align to the largest
intrinsic type used in the structures it is allocating for. If that's a
double or a uint64_t then it has to be 8 bytes.

Jason



Reply to: