来自C ++类中许多成员函数的性能?

时间:2012-05-20 07:47:44

标签: c++ performance class function member

如果我继续向一个类添加成员函数,是否会有重大的性能影响?当我使用这个类时,我可能只会同时使用几个成员函数,所以理论上我可以将单个类拆分成一些具有较少成员函数的较小类。我是否通过将大量功能塞进同一类来获得巨大的性能影响?

3 个答案:

答案 0 :(得分:4)

不,没关系。
但是,如果你想要一个好的设计,你应该确保你遵循 Single responsibility principle

  

课程改变的原因应该不止一个。

如果你的设计坚持这一点,那么它的所有好处并且在课堂上填充很多功能并不会在性能方面做任何不好的事情。

如果这些函数是virtual,有些人可能会争论性能损失但是只要这些函数的目的是在派生类中被覆盖,那么你应该使它们virtual,除非那些函数不仅仅是为了灵活性而是virtual,而是基于精心设计的设计,然后继续进行virtual。 性能命中不应该是你为你想要的功能付出的代价。

此外,只有剖析才能真正为您提供有关没有它的性能瓶颈的准确指示,您得到的是基于经验的推测或猜测,这些经验总是可能不是真正的指示。

答案 1 :(得分:2)

由于具有大量功能但具有深层次的函数调用以执行给定任务,性能提升。每个函数调用都会产生

  1. 按下推/省电流基准指针
  2. 保存当前堆栈指针,然后将当前堆栈指针作为新的基指针。
  3. 推送堆栈上的参数。

  4. 执行该功能。

  5. 所以,例如如果按顺序执行,如果你最终调用10个函数,你将堆栈结束10次,当函数(/ s)完成时,必须解开堆栈。

    其次,有gcc优化可以降低跳转到您的功能的成本我.Text例如通过使用名为attribute的{​​{1}}来改善此类函数的位置,以便更快地访问此类函数。

    您必须在执行它的线程* 的上下文中将函数执行视为* ,以便您可以识别各种瓶颈并对其进行优化。

答案 2 :(得分:1)

不,如果你将这个类分成更小的部分,那么二进制大小就不会有任何差异。如果您想将二进制文件大小仅减少到您调用的函数,则可以使您的类成为模板。