2010-02-12 30 views
2

C中的静态函数可能会更快,因为编译器的优化器可以看到所有的调用站点,因此可以优化被调用函数的epilog和序言?静态函数更快?

+0

这个问题实际上是一个合法的点评分问题,并使其成为社区wiki会阻止合法答案。 :-)(即我认为人们不愿意回答“真正”的问题,如果它不会帮助他们获得代表)。 – 2010-02-12 15:38:51

+0

@Chris:我希望我知道这一点。我现在可以改变它吗? – Mike 2010-02-12 15:50:46

+0

不,一旦帖子变成CW,就没有办法通过设计来解除它。请参阅:http://meta.stackexchange.com/questions/11740/what-are-community-wiki-posts-on-stack-overflow – 2010-02-12 15:54:09

回答

3

它理论上可以。然而,同时一些现代编译器可以执行所谓的“全局优化”,其基于分析跨翻译单元的代码之间的关系。这可以包括分析整个程序中给定函数的所有调用站点(而不是单个翻译单元),并可能将这种优化扩展到非静态函数。

2

它可以使编译器更愿意内联,是的。但是,一如既往,这取决于编译器。您必须测试并检查输出组件以确保。

4

如果您的函数是在与定义的函数相同的翻译单元中调用的(显然需要使用static函数),编译器可以轻松地内联此类调用,而不管函数是否声明为static

一些质量编译器也将执行整个程序优化,因此即使对不同翻译单元中的函数调用也可能发生内联和其他优化。

+1

是的!你能说'LLVM'吗?在编程实践中看起来像绝对的东西往往是昙花一现。 – 2010-02-12 15:41:59

+0

@Tim:+1 <3 LLVM(和其他动态编译系统)。但是,严重的是,甚至更高端的Visual C++版本也会为你完成整个程序的优化。 – 2010-02-12 15:44:07

+1

贫穷的海湾合作委员会还不能做:(但我听到工作正在进行中,以添加它。 – 2010-02-12 15:57:15