将大型const结构传递给函数

时间:2017-06-07 15:41:36

标签: c gcc optimization 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);

在这里,我冒昧地说没有必要在堆栈上创建x的第二个副本,因为foo不是(应该是)修改它的参数。 (何时)海湾合作委员会会得出同样的结论?

换句话说,为方便起见,我可以使用类型为const的{​​{1}}个参数,还是应该使用指针?我可以想象两个版本都是"好的风格"在某种意义上,我非常欣赏一个知情的意见。

1 个答案:

答案 0 :(得分:5)

如果你看这里:Why isn't pass struct by reference a common optimization?

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

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