Is there a GCC keyword to allow structure-reordering?

后端 未结 4 1347
灰色年华
灰色年华 2020-11-30 08:54

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 str

4条回答
  •  再見小時候
    2020-11-30 09:26

    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

    • Automated field re-ordering in C structs to avoid padding

提交回复
热议问题