I know why GCC doesn't re-order members of a structure by default, but I seldom write code that relies on the order of the structure, so is there some way I can flag my structures to be automaticly reordered?
Previous GCC versions have the -fipa-struct-reorg
option to allow structure reordering in -fwhole-program
+ -combine
mode.
-fipa-struct-reorg
Perform structure reorganization optimization, that change C-like structures layout in order to better utilize spatial locality. This transformation is affective for programs containing arrays of structures. Available in two compilation modes: profile-based (enabled with
-fprofile-generate
) or static (which uses built-in heuristics). Require-fipa-type-escape
to provide the safety of this transformation. It works only in whole program mode, so it requires-fwhole-program
and-combine
to be enabled. Structures considered'cold'
by this transformation are not affected (see--param struct-reorg-cold-struct-ratio=value
).
It was removed since GCC 4.8.x due to the below reasons in the release note
The struct reorg and matrix reorg optimizations (command-line options
-fipa-struct-reorg
and-fipa-matrix-reorg
) have been removed. They did not always work correctly, nor did they work with link-time optimization (LTO), hence were only applicable to programs consisting of a single translation unit.
However you can still try the struct-reorg-branch
on GCC SVN or the github mirror out on your own risk as it's still in active development.
You can also reorder the fields with the clang-reorder-fields tool in clang-tools-extra
See also