Оптимизация структуры компилятора C

Стандарт C не допускает некоторых оптимизаций структур:, например, перестановку полей, слияние полей, отбрасывание полей, которые никогда не считываются, подъем полей из структуры, если их можно превратить в автоматические переменные, и т. д. Это необходимо по разным причинам, включая единообразие расположения структур в единицах компиляции и возможность использования структур, совместимых с приведением-.

Используются ли современные компиляторы (, например. gcc, clang, Visual C)поддерживают расширения, которые позволяют мне сказать, что это нормально для выполнения этих оптимизаций?

Естественно, они имели бы смысл только для определений, которые были локальными для одной единицы компиляции, чтобы компилятор мог видеть все возможные варианты использования структуры; и некоторые вещи, (такие как вышеупомянутые определения приведения-совместимых структур), стали бы непригодными для использования. Но для определенных задач это может быть очень ценной оптимизацией.

Я знаю, что gcc использовал , чтобы иметь опцию -fipa-struct-reorg, разрешающую именно это, но она никогда не работала очень хорошо и немного сгнила, и в конце концов была удалена. Но я не знаю, было ли это чем-то заменено. И я не смог найти ничего в clang, что меня удивило, потому что я бы подумал, что это именно та оптимизация, которой clang будет повсюду...

8
задан David Given 27 March 2012 в 21:37
поделиться