Search code examples
cgccpaddingc99memory-alignment

Is there a GCC keyword to allow structure-reordering?


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?


Solution

  • 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