C编译器结构优化

时间:2012-03-27 21:37:44

标签: c compiler-construction compiler-optimization

C标准不允许对结构进行某些优化:例如,重新排列字段,合并字段,丢弃从未读取的字段,如果可以将字段转换为自动变量,则将字段提升出结构等。需要出于各种原因,包括跨编译单元的一致结构布局以及允许与流兼容的结构。

是否有任何现代编译器(例如gcc,clang,Visual C)支持扩展,允许我告诉它 可以进行这些优化吗?

当然,它们只对单个编译单元本地的定义有意义,因此编译器可以看到结构的所有可能用途;某些事情(如上述与演员兼容的结构定义)将变得无法使用。但对于某些任务,这可能是非常有价值的优化。

我知道gcc 使用来使用-fipa-struct-reorg选项来准确地允许这样做,但它从来没有很好地工作并且有点腐烂,最终被取出。但我不知道它是否被任何东西所取代。而且我无法在clang中找到任何内容,这让我感到惊讶,因为我认为这正是clang将会遍布的那种优化......

1 个答案:

答案 0 :(得分:4)

没有。没有理由提供这样的东西。

  1. 您无法在任何地方获取结构地址并将其发送到任何地方,因为它可能是别名。这几乎排除了单一功能之外的任何东西。

  2. 如果您可以通过标记结构成员所需的分析“如果不使用可以优化它”(当心时髦的偏移计算宏),那么您可以自己查看是否需要,并自己把它拿出来。

  3. 如果不确定,只需将其注释掉,看看是否收到编译错误。