1

如果我继续向类中添加成员函数,是否会对性能产生重大影响?当我使用该类时,我可能一次只能同时使用几个成员函数,因此理论上我可以将单个类拆分为多个具有较少成员函数的较小类。将很多函数塞进同一个类中是否会对性能造成很大影响?

4

3 回答 3

4

不,没关系。但是大量公共 api 的存在表明,如果你想要一个好的设计
,你应该确保你遵循单一责任原则。

改变班级的理由不应该超过一个。

如果您的设计坚持这一点,那么它一切都很好,并且在类中塞满了很多功能不会对性能造成任何坏处。

virtual如果这些函数的目的是在派生类中被覆盖,那么有些人可能会争论性能会受到影响,那么你应该制作它们virtual,除非这些函数不是virtual为了灵活性而制作的,而是为了一个深思熟虑的设计的基础,然后继续制作它们virtual。性能命中不应该是一个问题,它是您为想要拥有的功能付出的代价。

此外,只有配置文件才能真正为您提供有关性能瓶颈的准确指示,没有它,您得到的只是基于经验的推测或猜测,这可能并不真正具有指示性。

于 2012-05-20T07:52:45.300 回答
2

性能损失不是来自于拥有大量函数,而是来自于执行给定任务的函数调用的深层层次结构。每个函数调用都会导致

  1. 推入/保存当前基指针
  2. 保存当前堆栈指针,然后将当前堆栈指针作为新的基指针。
  3. 将参数压入堆栈。

  4. 执行功能。

因此,例如,如果在执行顺序中,如果您最终调用 10 个函数,您会结束堆栈 10 次,并且当函数(/s)完成时,堆栈必须展开。

其次,有 gcc 优化来降低跳转到您的函数的成本,.Text例如,通过使用改善此类函数的局部性的attribute被调用hot,以便更快地访问此类函数。

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

于 2012-05-20T07:58:12.417 回答
1

不,如果您将班级分成更小的部分,那么二进制大小不应该也不会有任何差异。如果您想将二进制大小减少到只有您调用的函数,您可以使您的类成为模板。

于 2012-05-20T07:49:54.540 回答