C标准不允许对结构进行某些优化:例如,重新排列字段,合并字段,丢弃永远不会读取的字段,如果字段可以变成自动变量等等,这是由于各种原因需要的,包括跨编译单元的一致的结构布局以及允许与演员兼容的结构。C编译器结构优化
是否有任何现代编译器(例如gcc,clang,Visual C)支持扩展,允许我告诉它它是可以做这些优化吗?
当然,它们只适用于单个编译单元本地的定义,以便编译器可以看到该结构的所有可能用法;和某些东西(如前述的与演员兼容的结构定义)将变得无法使用。但对于某些任务,这可能是一个非常有价值的优化。
我知道,GCC 用于有-fipa-struct-reorg
选项允许正是这个,但是它从来没有工作非常好,有点腐烂,并最终被取出。但我不知道它是否被任何东西取代。我一直没能找到任何东西在叮当中,这令我感到惊讶,因为我认为这正是铿锵声将会全部结束的最优化类型...
-flto能够优化这样的事情吗? – 2012-03-27 21:45:36
如果你给结构变量存储类“register”,它*可能会有所帮助,这会强制你不依赖于语言级别的内存布局;然而,优化器应该能够弄清楚,无论是否存在“注册”,我不知道它是否在实践中有任何区别... – Christoph 2012-03-27 22:42:56
不幸的是,不值得一试--- TA。 ('register'在结构成员或静态变量上无效,并且在自动变量上似乎被忽略。) – 2012-03-28 11:07:15