Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 静态函数能比非静态函数快吗?_C_Function_Optimization_Static_Compiler Construction - Fatal编程技术网

C 静态函数能比非静态函数快吗?

C 静态函数能比非静态函数快吗?,c,function,optimization,static,compiler-construction,C,Function,Optimization,Static,Compiler Construction,C中的静态函数是否可能更快,因为编译器的优化器可以看到所有调用位置,从而优化被调用函数的epilog和prolog?它可以使编译器更愿意内联,是的。但是,一如既往,这取决于编译器。您必须测试和检查输出程序集以确保。如果您的函数是从定义它的同一个翻译单元调用的(显然需要使用静态函数),编译器可以轻松地内联此类调用,无论函数是否声明为静态 一些高质量的编译器还将执行整个程序优化,因此,即使调用不同翻译单元中的函数,也可以进行内联和其他优化。理论上可以。但与此同时,一些现代编译器可以执行所谓的“全局优

C中的
静态
函数是否可能更快,因为编译器的优化器可以看到所有调用位置,从而优化被调用函数的epilog和prolog?

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

如果您的函数是从定义它的同一个翻译单元调用的(显然需要使用
静态
函数),编译器可以轻松地内联此类调用,无论函数是否声明为
静态


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

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

这个问题实际上是一个合法的评分问题,使用社区wiki将不鼓励合法的答案。:-)(也就是说,我认为人们不喜欢回答“真实”的问题,如果这不能帮助他们赢得声誉的话。)@Chris:我希望我知道这一点。我现在可以改变它吗?不,一旦一个帖子变成CW,就没有办法取消CW,这是故意的。看:另一个链接,关于“CW的政治”,我觉得很吸引人:是的!你能说
LLVM
?在编程实践中看似绝对的东西往往转瞬即逝。@Tim:+1可怜的GCC还不能做到这一点:(但我听说正在进行添加它的工作。