如果我继续向类中添加成员函数,是否会对性能产生重大影响?当我使用该类时,我可能一次只能同时使用几个成员函数,因此理论上我可以将单个类拆分为多个具有较少成员函数的较小类。将很多函数塞进同一个类中是否会对性能造成很大影响?
3 回答
不,没关系。但是大量公共 api 的存在表明,如果你想要一个好的设计
,你应该确保你遵循单一责任原则。
改变班级的理由不应该超过一个。
如果您的设计坚持这一点,那么它一切都很好,并且在类中塞满了很多功能不会对性能造成任何坏处。
virtual
如果这些函数的目的是在派生类中被覆盖,那么有些人可能会争论性能会受到影响,那么你应该制作它们virtual
,除非这些函数不是virtual
为了灵活性而制作的,而是为了一个深思熟虑的设计的基础,然后继续制作它们virtual
。性能命中不应该是一个问题,它是您为想要拥有的功能付出的代价。
此外,只有配置文件才能真正为您提供有关性能瓶颈的准确指示,没有它,您得到的只是基于经验的推测或猜测,这可能并不真正具有指示性。
性能损失不是来自于拥有大量函数,而是来自于执行给定任务的函数调用的深层层次结构。每个函数调用都会导致
- 推入/保存当前基指针
- 保存当前堆栈指针,然后将当前堆栈指针作为新的基指针。
将参数压入堆栈。
执行功能。
因此,例如,如果在执行顺序中,如果您最终调用 10 个函数,您会结束堆栈 10 次,并且当函数(/s)完成时,堆栈必须展开。
其次,有 gcc 优化来降低跳转到您的函数的成本,.Text
例如,通过使用改善此类函数的局部性的attribute
被调用hot
,以便更快地访问此类函数。
您始终必须将函数执行视为 *在执行它的线程的上下文中 *以便您可以识别各种瓶颈并优化它们。
不,如果您将班级分成更小的部分,那么二进制大小不应该也不会有任何差异。如果您想将二进制大小减少到只有您调用的函数,您可以使您的类成为模板。