Jes*_*ain 3 c optimization gcc const
假设我使用GCC 5.4 -O2或-O3优化级别编译以下内容.
typedef struct {
int data[90];
} huge_t;
int foo( const huge_t bar );
// ...
huge_t x = { 0 };
foo(x);
Run Code Online (Sandbox Code Playgroud)
在这里,我冒昧地说,没有必要x在堆栈上创建第二个副本,因为foo它不是(应该是)修改它的参数.(何时)海湾合作委员会会得出同样的结论?
换句话说,为方便起见,我可以使用const类型的参数huge_t,还是应该使用指针?我可以想象两个版本在某种意义上都是"好的风格",并且非常欣赏一个知情的观点.
如果你看这里: 为什么不通过引用传递struct一个常见的优化?
任何C编译器都不太可能进行这种优化.这通常不安全.
永远不要假设你的优化者会以你想要的方式做事.优化器必须符合某些规则,以便它们永远不会破坏您的代码.有时候,当优化者不能理解某些东西是安全的时候.如果为了性能,您需要代码以某种方式运行,那么就这样写.