https://gcc.gnu.org/bugzilla/show_bug.cgi?id=70755

--- Comment #3 from Michael Bruck <bruck.michael at googlemail dot com> ---
(In reply to Michael Bruck from comment #2)
> (In reply to Richard Earnshaw from comment #1)
> > This is a deliberate design choice.  By doing this we gain significant
> > benefits from having aligned objects, which helps with data copying and
> > other optimizations.
> > 
> > Consider, for example, the object
> > 
> > struct x
> > {
> >   char a;
> >   char b;
> >   char c;
> >   char d;
> > };
> > 
> > struct x A, B;
> > 
> > f()
> > {
> >   B = A;
> > }
> > 
> > Since the objects are aligned then this function can be optimized to single
> > 32-bit load and store operations that work very efficiently.
> > 
> > As you've noticed, it is possible to force the alignment down to the
> > architectural minimums by annotations, but for most users it makes little
> > difference and the defaults are preferable.
> 
> "for most users"
> 
> Maybe I should have specified -mcortex-m0 on the command line to illustrate
> the point. For most Cortex-M0 users with 16 kB this 300% memory waste is a
> bad trade-off.
> 
> Can you implement a command line option to deactivate this behavior?
> 
> Your reply did not address b) and c), should I open a separate bug to
> discuss these?


A struct with only one bool does not derive the benefits described in your
example and should be exempted from this modified alignment for this reason
alone.(In reply to Richard Earnshaw from comment #1)
> This is a deliberate design choice.  By doing this we gain significant
> benefits from having aligned objects, which helps with data copying and
> other optimizations.
> 
> Consider, for example, the object
> 
> struct x
> {
>   char a;
>   char b;
>   char c;
>   char d;
> };
> 
> struct x A, B;
> 
> f()
> {
>   B = A;
> }
> 
> Since the objects are aligned then this function can be optimized to single
> 32-bit load and store operations that work very efficiently.
> 
> As you've noticed, it is possible to force the alignment down to the
> architectural minimums by annotations, but for most users it makes little
> difference and the defaults are preferable.

A struct with only one bool does not derive the benefits described in your
example and should be exempted from this modified alignment for this reason
alone.

Reply via email to