Ответ 1
Предыдущие версии GCC имели -fipa-struct-reorg
позволяющую переупорядочивать структуру в режиме -fwhole-program
+ -combine
.
-fipa-struct-reorg
Выполните оптимизацию реорганизации структуры, которая изменяет расположение C-подобных структур, чтобы лучше использовать пространственную локализацию. Это преобразование действует для программ, содержащих массивы структур. Доступно в двух режимах компиляции: на основе профиля (включается с
-fprofile-generate
) или статического (который использует встроенную эвристику). Требовать-fipa-type-escape
чтобы обеспечить безопасность этого преобразования. Он работает только в режиме всей программы, поэтому для его-fwhole-program
требуется-fwhole-program
и-combine
. Структуры, считающиеся'cold'
результате этого преобразования, не затрагиваются (см.--param struct-reorg-cold-struct-ratio=value
).
Он был удален после GCC 4.8.x по причинам, указанным ниже в примечании к выпуску.
Оптимизация struct reorg и matrix reorg (параметры командной строки
-fipa-struct-reorg
-fipa-matrix-reorg
и-fipa-matrix-reorg
) были удалены. Они не всегда работали правильно и не работали с оптимизацией по времени соединения (LTO), поэтому были применимы только к программам, состоящим из одного блока перевода.
Однако вы все равно можете попробовать struct-reorg-branch
на GCC SVN или github, отражая свой собственный риск, поскольку он все еще находится в активной разработке.
Вы также можете изменить порядок полей с помощью инструмента clang-reorder-fields в clang-tools-extra
Смотрите также