C程序中超大函数的影响?

C程序中超大函数的影响?,c,C,忽略模块性和可读性,就性能而言,与许多细分函数相比,拥有大型函数会产生什么影响?(一般为C语言)。由于函数调用较少,与许多小函数相比,大函数的性能增益可能较小。但我的一般规则是:让编译器处理优化问题,并将注意力集中在功能性和安全性上。函数是任何编程语言中代码组织的重要组成部分。尽管从性能角度来看,使用单个大函数会减少函数调用的使用,从而减少堆栈跳转,从而产生性能更好的代码。但是,并不是每一个项目都有这样的奢侈:没有模块化,代码不可读,更糟糕的是容易混淆或误导。随着时间的推移,在维护、重构、功能增

忽略模块性和可读性,就性能而言,与许多细分函数相比,拥有大型函数会产生什么影响?(一般为C语言)。

由于函数调用较少,与许多小函数相比,大函数的性能增益可能较小。但我的一般规则是:让编译器处理优化问题,并将注意力集中在功能性和安全性上。

函数是任何编程语言中代码组织的重要组成部分。尽管从性能角度来看,使用单个大函数会减少函数调用的使用,从而减少堆栈跳转,从而产生性能更好的代码。但是,并不是每一个项目都有这样的奢侈:没有模块化,代码不可读,更糟糕的是容易混淆或误导。随着时间的推移,在维护、重构、功能增强等方面,大功能项目的成本将远远高于小功能项目,一个函数只有在特定的环境下进行分析时才是大的,在某些情况下,一个大函数不能被分解成更小的部分,并且它是完全可以接受的,只要它设计良好且简单


记住编写函数的第一条规则:
做一件事,做好一件事

在C编程中,为每个函数调用创建一个堆栈框架,因此在单个函数的情况下,只有一个堆栈,不需要堆栈跳转,但在多个子函数的情况下,每个函数都将有一个单独的堆栈,每个函数调用都会有堆栈跳转,因此性能可能会根据编译器优化而降低。

显而易见的是,如果只有一个大函数,则不必调用很多函数。然而,在现代多GHz CPU和现代编译器上,调用函数的成本通常可以忽略不计。如果对你来说是这样,我不知道。唯一能确定的方法就是测量它。如果有任何可测量的差异,我会非常惊讶。这可能部分取决于大型子程序的结构。如果是线性码(条件很少,没有循环),那么就没有什么区别了。如果循环和条件等中存在循环,那么对于具有小型子例程的代码,您可能会获得更好的引用局部性(从而获得更多缓存命中)。这样说,大型函数的性能优势可能会被可理解性的损失所抵消。使用积极的内联和声明为静态的函数,您可能会发现您的小子例程仍然内联在大函数中。这并不能回答问题,也不是本网站的主题。@Potatoswatter:同意它的主题。但是,我只是想提供帮助,并将其标记为非主题。函数调用开销通常通过内联和动态分支预测来消除。