Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
| From | Eric Sosman <esosman@ieee-dot-org.invalid> |
|---|---|
| Newsgroups | comp.std.c |
| Subject | Re: Structure Packing. |
| Date | 2012-06-12 09:21 -0400 |
| Organization | A noiseless patient Spider |
| Message-ID | <jr7fpp$eti$1@dont-email.me> (permalink) |
| References | <12b3df42-f6a0-4411-a5e5-136900f8255b@googlegroups.com> <jqovin$9sr$1@dont-email.me> <4FD6ABFA.72F52C75@bytecraft.com> |
On 6/11/2012 10:39 PM, Walter Banks wrote:
>
>
> James Kuyper wrote:
>
>> Yes, the standard allows padding between members and after the last
>> member (but not before the first member). It's rare for an
>> implementation to insert such padding between two members with the same
>> alignment requirements, but perfectly permissible.
>>
>>> I just always feel uneasy when I see code that relies on the above structure being packed together without an explicit pack pragma.
>>> is this just my paranoia?
>>
>> No, it's quite reasonable to be worried about this.
>
> A current compiler project I am working on potentially has a completely different twist on struct placement.
>
> There is quite a list of hardware based alignment requirements based on boundaries. It is a RAM poor processor and I am being very
> tempted to assign global variables in the holes left behind in global structs. My guess the need for RAM space will outweigh other
> considerations.
Don't do it: Operations on the named elements of a struct are
not guaranteed to preserve the contents of the holes. For example
struct s {
unsigned char flag;
// possible hole here
unsigned int value;
} x;
unsigned char *hole = &x.flag + 1;
size_t hole_size = (unsigned char*)&x.value - hole;
if (hole_size > 0) *hole = 0xFF;
flag = 42;
if (hole_size > 0) assert(*hole == 0xFF); // may fail
struct s y = x;
assert(memcmp(&x, &y, sizeof x) == 0); // may fail
If you need the variable, give it a name and make it an ordinary
struct element.
If you're worried about different alignments on different
systems and it's difficult to find one arrangement that works
efficiently for all, consider generating system-specific struct
definitions from a data file during your build process. You can
then give each system its own arrangement of the struct elements
to pack things as efficiently as possible. (Of course, this won't
work for struct elements that "must be first" or "must appear in
such-and-such order" -- but if memory scarcity is extreme, that
sacrifice may be worthwhile.)
--
Eric Sosman
esosman@ieee-dot-org.invalid
Back to comp.std.c | Previous | Next — Previous in thread | Next in thread | Find similar | Unroll thread
Structure Packing. John Kearney <dethrophes@googlemail.com> - 2012-06-06 17:27 -0700
Re: Structure Packing. James Kuyper <jameskuyper@verizon.net> - 2012-06-06 21:19 -0400
Re: Structure Packing. Walter Banks <walter@bytecraft.com> - 2012-06-11 22:39 -0400
Re: Structure Packing. Eric Sosman <esosman@ieee-dot-org.invalid> - 2012-06-12 09:21 -0400
Re: Structure Packing. Walter Banks <walter@bytecraft.com> - 2012-06-12 11:51 -0400
Re: Structure Packing. Hans-Bernhard Bröker <HBBroeker@t-online.de> - 2012-06-12 18:37 +0200
Re: Structure Packing. Walter Banks <walter@bytecraft.com> - 2012-06-12 15:06 -0400
Re: Structure Packing. Eric Sosman <esosman@ieee-dot-org.invalid> - 2012-06-12 16:22 -0400
Re: Structure Packing. Walter Banks <walter@bytecraft.com> - 2012-06-12 17:44 -0400
Re: Structure Packing. Hans-Bernhard Bröker <HBBroeker@t-online.de> - 2012-06-13 15:53 +0200
Re: Structure Packing. Phil Carmody <thefatphil_demunged@yahoo.co.uk> - 2012-06-18 12:37 +0300
Re: Structure Packing. Martin Shobe <martin.shobe@yahoo.com> - 2012-06-12 16:22 +0000
Re: Structure Packing. Walter Banks <walter@bytecraft.com> - 2012-06-12 15:24 -0400
Re: Structure Packing. Eric Sosman <esosman@ieee-dot-org.invalid> - 2012-06-12 16:33 -0400
Re: Structure Packing. Walter Banks <walter@bytecraft.com> - 2012-06-12 17:17 -0400
Re: Structure Packing. Keith Thompson <kst-u@mib.org> - 2012-06-06 18:35 -0700
Re: Structure Packing. John Kearney <dethrophes@googlemail.com> - 2012-06-06 21:58 -0700
Re: Structure Packing. Keith Thompson <kst-u@mib.org> - 2012-06-06 23:54 -0700
Re: Structure Packing. John Kearney <dethrophes@googlemail.com> - 2012-06-07 07:47 -0700
Re: Structure Packing. James Kuyper <jameskuyper@verizon.net> - 2012-06-07 12:39 -0400
Re: Structure Packing. jacob navia <jacob@spamsink.net> - 2012-06-07 11:14 +0200
Re: Structure Packing. Keith Thompson <kst-u@mib.org> - 2012-06-07 09:46 -0700
Re: Structure Packing. John Kearney <dethrophes@googlemail.com> - 2012-06-07 11:57 -0700
csiph-web