GCC #define for alignment
Andrew Haley
aph@redhat.com
Wed Dec 3 15:43:00 GMT 2008
Ian Lance Taylor wrote:
> Duane Ellis <duane@duaneellis.com> writes:
>
>> I have a problem in a memory allocator that acts like Malloc(), where
>> I need to align the result value in the same form as malloc.
>>
>> I can easily hard code something :-( but I'd rather use some "well
>> known" perhaps ANSI-C #define for the alignment value.
>> It could be a GCC specific #define :-( but I'd rather it not be.
>>
>> Simply put, for portability reasons I'd rather not have a hard coded
>> thing like this:
>>
>> // ensure proper machine alignment
>> x = (x + 3) & (~3);
>>
>> Suggestions? Sure I could use sizeof(void *) also..
>
> There is no portable way to do this. The usual approach is to write
> something like
> union allocation_unit {
> long long l;
> double d;
> };
> and then do all your allocations in terms of sizeof(union
> allocation_unit).
But that might not work either: I've seen arches where struct/union
members had different alignment requirements from the same objects
outside structs. IIRC on x86 double is 8-aligned but struct{double}
is 4-aligned.
Andrew.
More information about the Gcc-help
mailing list