c -影响gcc中的函数克隆/复制/常量传播



在启用优化的情况下运行gcc时,当它认为函数处于热路径中或有常量传播到函数参数时,它会克隆(复制)C函数。

更具体地说,这似乎由fipa-cp-clone选项控制。

有什么方法可以影响这个吗?例如,用一些属性标记一个参数,作为编译时常数(就像你可以在c++中使用模板参数一样),这将导致函数被克隆?

重要的是调用函数时是否带常量参数(实际的常量表达式,或者编译器通过常量传播确定为常量的内容)。在这种情况下,GCC将克隆该函数,除非它认为这样做代价太大或好处太少;我不知道如何影响这个指标。请注意,常量传播只发生在单个翻译单元(源文件)中,除非您一次编译整个程序或使用链接时优化,并且我不确定克隆是否仍然可以在此时发生。

我最好的猜测是,如果克隆没有在您期望它应该发生的时候发生,则GCC从未在调用函数的地方看到常数参数。即使您知道它将是常量,编译器也可能无法证明它是。

最新更新