Стандарт C не допускает определенной оптимизации структур: например, переупорядочение полей, объединение полей, отбрасывание полей, из которых никогда не считываются, удаление полей из структуры, если их можно превратить в автоматические переменные, и т. Д. Этонеобходим по разным причинам, включая согласованные структуры структур в единицах компиляции и использование совместимых с приведением типов структур.
Какие-нибудь современные компиляторы (например, gcc, clang, Visual C) поддерживают расширения, которые позволяют мне сказать, что это нормально ли выполнять эти оптимизации?
Естественно, они имеют смысл только для определений, которые являются локальными для одного модуля компиляции, чтобы компилятор мог видеть все возможные варианты использования структуры;и некоторые вещи (такие как вышеупомянутые определения совместимой структуры) стали бы непригодными.Но для некоторых задач это может быть очень ценной оптимизацией.
Я знаю, что gcc использовал , чтобы иметь опцию -fipa-struct-reorg
, чтобы разрешить именно это, но это никогда не работало очень хорошосгнил, и в конце концов был вынут.Но я не знаю, было ли это заменено чем-либо.И я не смог найти ничего в clang, что меня удивило, потому что я подумал, что это именно тот тип оптимизации, которым clang будет повсюду ...