跑步时gcc
使用 optimizations-on 时,当它认为函数位于热路径中或有常量传播到函数参数时,它会克隆(重复)C 函数。
更具体地说,这似乎是由fipa-cp-clone
option.
有什么办法可以影响这个吗?例如,使用某些属性标记一个参数,作为编译时常量(就像在 C++ 中使用模板参数所做的那样),这将导致函数被克隆?
重要的是函数是否用常量参数调用(或者是一个实际的参数)常量表达式,或者编译器通过常量传播确定为常量的东西)。在这种情况下,GCC 将克隆该函数,除非它确定这样做成本太高或收益太小;我不知道影响该指标的方法。请注意,恒定传播仅发生在单个翻译单元(源文件)内,除非您立即编译整个程序或使用链接时优化,并且我不确定此时是否仍会发生克隆。
我最好的猜测是,如果克隆在您期望的时候没有发生,那么 GCC 永远不会在调用函数的地方看到常量参数。即使您知道它将是常量,编译器也可能无法证明它是常量。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)