在计算机文献中,通常建议尽可能编写简短的函数。我知道它可能会增加可读性(尽管并非总是如此),并且这种方法也提供了更大的灵活性。但这也与优化有关吗?我的意思是——编译器编译一堆小例程而不是几个大例程是否重要?
谢谢。
在计算机文献中,通常建议尽可能编写简短的函数。我知道它可能会增加可读性(尽管并非总是如此),并且这种方法也提供了更大的灵活性。但这也与优化有关吗?我的意思是——编译器编译一堆小例程而不是几个大例程是否重要?
谢谢。
这取决于编译器。许多较旧的编译器一次只优化一个函数,因此编写更大的函数(达到一定限制)可以改进优化——但(其中大多数)超过该限制会完全关闭优化。
当前大多数合理的编译器可以为函数生成内联代码(并且 C99 添加了ineline
关键字来促进这一点)并进行全局(跨函数)优化,在这种情况下它通常根本没有区别。
@twain249 和 @Jerry 都是正确的;将程序分解为多个函数可能会对性能产生负面影响,但这取决于编译器是否可以将函数优化为内联代码。
唯一确定的方法是检查程序的汇编器输出并进行一些分析。例如,如果您知道某个特定的代码路径导致了性能问题,您可以查看汇编器,看看有多少函数被调用,有多少次参数被压入堆栈等。在这种情况下,您可能希望将小功能合并为一个更大的功能。
这一直是我过去关心的问题:对嵌入式项目进行非常严格的优化,我有意识地尝试减少函数调用的数量,尤其是在紧密循环中。但是,这确实会产生笨拙的功能,有时长达几页。为了降低维护成本,您可以使用宏,我已经大量利用并成功地确保没有函数调用,同时保持可读性。