|
|
1
4
当您使用模板将其自动化时,您的“糟糕的解决方案”看起来会更好。我们的目标:商店
为此,我们需要将派生类型映射到连续整数。一种简单的方法是使用一个全局计数器和一个函数模板,该模板在每次实例化时递增并存储它。
你来了!新的派生回调现在自动注册。 |
|
|
2
3
您可以将全局变量拉入在派生类型上模板化的类中,在实例化时,确保它是整个调用的一部分。
|
|
|
3
1
虚拟调用已经是一个非常简单和快速的实现,因此如果这是一个问题,没有结构变化,任何事情都不够快。值得注意的是,我不会期望一个简单的
因此,在代码级别,需要进行一些额外的内存读取,然后通过函数指针调用函数。然而,这阻碍了许多优化。在编译器级别,它不能再内联函数。在您需要的CPU级别
没有设计更改的最优化解决方案更像您展示的那样。完全去掉虚函数/间接函数,并将其存储在单独的容器中。这使得编译器可以在认为值得的情况下内联函数调用,并使CPU变得容易。您可能会使用重载或模板,所以在最坏的情况下只有一个地方可以调用(使用模板,取决于需要更聪明的东西)。
请注意,您更改了调用对象的顺序。您按类类型对它们进行了排序,但之前的顺序与
仅按类类型排序(可以使用
“配置文件引导优化”(PGO,在编译器中查找,例如MSVC和GCC可以做到这一点)也可能有帮助,需要一些额外的构建时间。它允许编译器根据实际运行的代码进行优化。我没有详细研究过为实际项目生成的代码,但我知道MSVC至少可以使用类似switch语句的命令来“内联”常见的虚拟调用
|
|
AstralHex · 矩阵乘法代码工作不正常 1 年前 |
|
|
Fishie · 作为类成员的智能指针是否仍然自动释放?[关闭] 1 年前 |
|
|
Die4Toast · 递归调用成员箭头运算符-> 1 年前 |
|
|
Anka Hanım · 关于结构和动态数组地址的问题 1 年前 |