将大型const结构传递给函数

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,还是应该使用指针?我可以想象两个版本在某种意义上都是"好的风格",并且非常欣赏一个知情的观点.

Phi*_*ing 5

如果你看这里: 为什么不通过引用传递struct一个常见的优化?

任何C编译器都不太可能进行这种优化.这通常不安全.

永远不要假设你的优化者会以你想要的方式做事.优化器必须符合某些规则,以便它们永远不会破坏您的代码.有时候,当优化者不能理解某些东西是安全的时候.如果为了性能,您需要代码以某种方式运行,那么就这样写.