From: Chris Lattner <sabre@nondot.org>
To: Ian Lance Taylor <ian@airs.com>
Cc: gcc-help@gcc.gnu.org
Subject: Re: attribute aligned(4) ignored
Date: Tue, 26 Jul 2005 04:58:00 -0000 [thread overview]
Message-ID: <Pine.LNX.4.61.0507252354160.12411@nondot.org> (raw)
In-Reply-To: <m3u0iife3a.fsf@gossamer.airs.com>
On Mon, 25 Jul 2005, Ian Lance Taylor wrote:
> Chris Lattner <sabre@nondot.org> writes:
>> Hi All, I'm trying to reduce the alignment of the double in this
>> structure to 4 bytes (from 8) on Darwin. The goal of doing this is to
>> reduce the structure to 12 bytes in size. Here is my testcase:
>>
>> struct Test {
>> double D __attribute__((aligned(4))); // only 4 bytes, not 8!
>> int X;
>> };
>>
>> int X() {
>> return sizeof(struct Test); // Should return 12, not 16.
>> }
>>
>> Despite my attempt above, the structure is still 16 bytes in size, due
>> to the tail padding required to pad the structure to ensure 8-byte
>> alignment.
>>
>> Does anyone know how to reduce the alignment of the double,
>> eliminating the tail padding?
>
> How about
>
> double D __attribute__((aligned(4), packed));
This is exactly the sort of thing I want to do. My structs can be
arbitrarily complex, and can have a bunch of stuff in them that should not
be packed. This means that I don't want to use attribute packed on the
structure itself, but using it on the member would be fine.
However, when I try this:
struct Test {
double D __attribute__((packed,aligned(4)));
short X;
};
... the struct maintains its 8-byte alignment even though nothing inside
of it requires 8-byte alignment any more. In this particular case, for
example, I want the struct to be 12-bytes, not 10: just reducing the
alignment requirement of the double, without eliminating all intra-struct
padding. This is why I don't think I can use attribute packed on the
struct itself.
Unfortunately, I'm not sure if this is possible, at least without using
'packed' on the struct, then inserting a bunch of dummy members to
explicitly insert the intra-field packing. I hope there is a better way
though, as this is really nasty and fragile.
Thanks,
-Chris
--
http://nondot.org/sabre/
http://llvm.org/
next prev parent reply other threads:[~2005-07-26 4:58 UTC|newest]
Thread overview: 9+ messages / expand[flat|nested] mbox.gz Atom feed top
2005-07-26 1:04 Chris Lattner
2005-07-26 3:22 ` Ian Lance Taylor
2005-07-26 4:58 ` Chris Lattner [this message]
2005-07-26 5:02 ` corey taylor
2005-07-26 5:04 ` Chris Lattner
2005-07-26 5:25 ` Ian Lance Taylor
2005-07-26 5:57 ` Chris Lattner
2005-07-26 6:27 ` Ian Lance Taylor
2005-07-26 6:44 ` Chris Lattner
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=Pine.LNX.4.61.0507252354160.12411@nondot.org \
--to=sabre@nondot.org \
--cc=gcc-help@gcc.gnu.org \
--cc=ian@airs.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).