https://gcc.gnu.org/bugzilla/show_bug.cgi?id=70755
--- Comment #2 from Michael Bruck <bruck.michael at googlemail dot com> --- (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?