Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > comp.lang.c > #103421

Re: Preprocessor expressions

From BartC <bc@freeuk.com>
Newsgroups comp.lang.c
Subject Re: Preprocessor expressions
Date 2017-02-07 22:09 +0000
Organization A noiseless patient Spider
Message-ID <o7dgfs$ksp$1@dont-email.me> (permalink)
References (9 earlier) <030e3613-d745-46c4-8a46-d625eb276baa@googlegroups.com> <o7a3u7$9u$1@dont-email.me> <1e988be1-ec21-4335-8f79-e6d1e213f1c7@googlegroups.com> <o7dcfu$69q$1@dont-email.me> <86f1f0c5-5f44-4bab-8cd2-074b407220e8@googlegroups.com>

Show all headers | View raw


On 07/02/2017 21:16, supercat@casperkitty.com wrote:
> On Tuesday, February 7, 2017 at 3:01:36 PM UTC-6, Bart wrote:
>> My experience at the moment (translating from a non-C language to C, in
>> a recent working project) is that things such as pointer sizes, and
>> struct-member offsets, will be fixed. That means that generated C
>> requires things like pack(1), and to be compiled for a particular
>> pointer size.
>
> I would think it should be fairly straightforward to keep track of the
> required alignment for each type, and insert padding bytes in structure
> definitions as needed to maintain alignment.  While the Standard allows
> implementations to use arbitrary padding rules, the vast majority use
> a simple rule which says that every object will be preceded by whatever
> amount of padding would be needed to reach the next multiple of its
> alignment, and every structure or union will have the same alignment
> requirement as its coarsest member.  If your code knows the required
> alignment for each primitive, it should be able to add byte fields with
> dummy names so as to ensure that a compiler would never need to add any
> padding of its own unless it uses very weird structure layout rules.
>

I had once a project which had a struct with this layout:

   struct {
       int a;                // 32 bits
       double b;             // 64 bits
       int c;                // 32 bits
}

(The real thing was a lot more complex with anonymous unions everywhere. 
But it had carefully crafted to occupy 16 bytes in total.)

On x86-32, the compiler was quite happy to put member 'b' at offset 4.

But when I compiled it for 32-bit ARM, the same compiler, gcc, had to 
put 'b' at offset 8, which made the struct an odd size like 20 bytes.

This is why I think you can't always predict what a compiler will do.

(In the above example, I had to rearrange things so that 64-bit values 
were at 64-bit offsets, which was probably better, but there was nothing 
wrong with the original alignment that I could see. It didn't make the 
x86 version any faster.)

Anyway, when you're writing a compiler, then you have to be the one who 
makes the decisions. I might want a char[10] at an 8-byte alignment, and 
enforce it with explicit padding, but a C compiler might use 1-byte. Or 
the compiler can target C and D languages, and they do things differently.

You don't want to have to fight another compiler. And I bet C compilers 
aren't so considerate; do you think a C compiler can manage not to 
evaluate sizeof(void*), or the actual offsets of members in a struct, 
because someone wants to use a back-end that targets language X that has 
its own rules?

-- 
Bartc

Back to comp.lang.c | Previous | Next — Previous in thread | Next in thread | Find similar | Unroll thread


Thread

Preprocessor expressions BartC <bc@freeuk.com> - 2017-01-22 13:24 +0000
  Re: Preprocessor expressions jameskuyper@verizon.net - 2017-01-22 07:52 -0800
    Re: Preprocessor expressions Ralf Damaschke <rwspam@gmx.de> - 2017-01-22 17:15 +0000
      Re: Preprocessor expressions "James R. Kuyper" <jameskuyper@verizon.net> - 2017-01-22 13:32 -0500
    Re: Preprocessor expressions BartC <bc@freeuk.com> - 2017-01-22 17:38 +0000
      Re: Preprocessor expressions Thiago Adams <thiago.adams@gmail.com> - 2017-02-01 03:12 -0800
        Re: Preprocessor expressions Ben Bacarisse <ben.usenet@bsb.me.uk> - 2017-02-01 11:44 +0000
        Re: Preprocessor expressions BartC <bc@freeuk.com> - 2017-02-01 11:56 +0000
        Re: Preprocessor expressions jameskuyper@verizon.net - 2017-02-01 08:35 -0800
          Re: Preprocessor expressions Thiago Adams <thiago.adams@gmail.com> - 2017-02-02 09:23 -0800
            Re: Preprocessor expressions BartC <bc@freeuk.com> - 2017-02-02 18:14 +0000
              Re: Preprocessor expressions Keith Thompson <kst-u@mib.org> - 2017-02-02 10:35 -0800
              Re: Preprocessor expressions Thiago Adams <thiago.adams@gmail.com> - 2017-02-02 17:09 -0800
                Re: Preprocessor expressions Thiago Adams <thiago.adams@gmail.com> - 2017-02-05 10:09 -0800
                Re: Preprocessor expressions Thiago Adams <thiago.adams@gmail.com> - 2017-02-05 10:38 -0800
                Re: Preprocessor expressions Thiago Adams <thiago.adams@gmail.com> - 2017-02-05 11:03 -0800
                Re: Preprocessor expressions BartC <bc@freeuk.com> - 2017-02-06 15:17 +0000
                Re: Preprocessor expressions Thiago Adams <thiago.adams@gmail.com> - 2017-02-07 05:36 -0800
                Re: Preprocessor expressions BartC <bc@freeuk.com> - 2017-02-07 21:01 +0000
                Re: Preprocessor expressions supercat@casperkitty.com - 2017-02-07 13:16 -0800
                Re: Preprocessor expressions BartC <bc@freeuk.com> - 2017-02-07 22:09 +0000
                Re: Preprocessor expressions supercat@casperkitty.com - 2017-02-07 14:33 -0800
                Re: Preprocessor expressions Keith Thompson <kst-u@mib.org> - 2017-02-07 14:52 -0800
                Re: Preprocessor expressions BartC <bc@freeuk.com> - 2017-02-08 00:13 +0000
                Re: Preprocessor expressions Keith Thompson <kst-u@mib.org> - 2017-02-07 16:39 -0800
                Re: Preprocessor expressions jameskuyper@verizon.net - 2017-02-07 16:47 -0800
                Re: Preprocessor expressions David Brown <david.brown@hesbynett.no> - 2017-02-08 10:03 +0100
                Re: Preprocessor expressions Keith Thompson <kst-u@mib.org> - 2017-02-08 09:19 -0800
                Re: Preprocessor expressions Thiago Adams <thiago.adams@gmail.com> - 2017-02-08 12:35 -0800
                Re: Preprocessor expressions Thiago Adams <thiago.adams@gmail.com> - 2017-02-09 05:25 -0800
                Re: Preprocessor expressions supercat@casperkitty.com - 2017-02-09 07:37 -0800
                Re: Preprocessor expressions BartC <bc@freeuk.com> - 2017-02-09 15:52 +0000
  Re: Preprocessor expressions BartC <bc@freeuk.com> - 2017-01-22 19:34 +0000
    Re: Preprocessor expressions jameskuyper@verizon.net - 2017-01-22 13:01 -0800
  Re: Preprocessor expressions Tim Rentsch <txr@alumni.caltech.edu> - 2017-01-30 05:30 -0800

csiph-web