|
|
1
3
虚拟函数和函数指针都有相同的性能问题。 首先,编译器通常无法内联这些调用。一般来说,编译器必须进行真正的函数调用并承担副作用,所以许多优化技术无法执行。通常,影响是相当大的。 其次,在代码执行期间,CPU通常无法通过指针调用预取代码,因为它不知道执行将转移到哪里。然而,与分支预测器类似,硬件调用设备化器尝试根据过去的性能推测性地预取指令,并且在多次调用之后,它们都得到了培训,并在那里做得很好。然而,缺乏内联仍然会让你头疼。 |
|
|
2
1
如果不希望性能受到影响,可以使用 CRTP :
现场示例: https://onlinegdb.com/SJzxbtqjz 然而,这可能不是您想要的-这完全取决于您的用例,我无法从您的问题中判断出来。确保您阅读了我上面链接的维基百科页面上的陷阱部分:
编辑: 否则,您将需要按照您的建议进行操作,并付出通过函数指针的代价。然而,如果您调用的函数不是很简单,那么您可能不会看到性能上的差异。 编辑2:
编译器将完全内联调用
GCC 7.3带有-O2优化标志,代码更简单(只是为了避免
不会为类生成代码
|
|
|
3
0
模板解决方案:
结果:
|
|
|
4
0
带参考和模板的解决方案。
它比模板更好,因为方法
结果:
|
|
AstralHex · 矩阵乘法代码工作不正常 1 年前 |
|
|
Fishie · 作为类成员的智能指针是否仍然自动释放?[关闭] 1 年前 |
|
|
Die4Toast · 递归调用成员箭头运算符-> 1 年前 |
|
|
Anka Hanım · 关于结构和动态数组地址的问题 1 年前 |