提取功能会影响性能吗?

mor*_*avi 1 c++

我正在考虑将长函数解析为几个小函数,我关注性能.假设我们有很多代码行的长函数:

void f(){
....
}
Run Code Online (Sandbox Code Playgroud)

现在,如果我们将工作提取到单独的功能:

void f(){
  f1();
  f2();
  f3();
} 
Run Code Online (Sandbox Code Playgroud)

它通常会影响性能吗?我正在寻找一种平衡性能和良好软件设计的一般 策略.拥有小功能总是一个好习惯吗?假设一个具有私有成员变量的类int something.是否可以通过致电get_something()而不是something公开来归还它?

假设函数为非虚拟和优化级别/O3.问题的重要性在于,如果第一个版本更快,我们将面临可维护性和性能之间的权衡.

Jes*_*uhl 6

如果你的函数很简单,编译器通常会为你内联它们,因此不会有任何开销.

即使编译器没有内联你的函数,如果函数调用的开销很重要,它们也必须是一个非常热门的路径的一部分.

努力首先编写可读代码,然后担心性能问题.并且只有在对应用程序进行概要分析(启用了优化)后才能优化性能,并证明所讨论的代码是实际的性能瓶颈.

  • 你真的,真的无法猜测代码中的性能瓶颈在哪里.我一直在优化代码35年,并设法猜对了两次 - 你必须测量*然后*你可以优化该热点.更重要的是,如果你有简单,直接的函数(不可避免地要调用许多其他函数),你可以让它们中的一个复杂10倍以改进算法(例如通过缓存以前的结果,或者将算法从O(n²)改为O(n.lg(n)) (2认同)
  • 它是.我只是想把它撞到OP的家里. (2认同)