|
|
1
6
分析未经优化的代码几乎毫无意义。使用
基于反馈,甚至
|
|
|
2
11
一旦vtable在缓存中,实际执行某些操作的虚拟和非虚拟函数之间的性能差异就非常小。在使用C++开发软件时,这通常不是你应该关注的。正如其他人指出的,在C++中对未优化的代码进行基准测试是没有意义的。 |
|
|
3
2
考虑到CPU在重新组织代码、交错计算和内存访问的情况下做了多少工作,我不会将太多的内容理解为4%的差异——这是不值得担心的,因为这样的微基准无法得出任何合理的结论。 尝试一个真实的计算,通过真实的内存访问来了解虚拟方法的成本。虚拟方法本身通常不是问题——现代CPU将把vtable获取的指针与其他工作交织在一起——正是缺少内联会降低性能。 |
|
|
4
1
考虑到程序的简单性,编译器很有可能正在优化掉某些东西,或者这一行中的某些东西。增加复杂性/使编译器编译完全符合您的需要,这是您应该针对这类事情(在运行时的区别是,我相信只有2个解引用,因此小于函数调用的其余部分)。如@marcelo所说,实现这一点的一种方法是,将A和B分别编译成与主文件不同的文件——我将更进一步,将每个文件编译成自己的文件。但是,我不同意他的观点,因为上面提到的原因,您应该关闭优化,这样编译器就可以生成代码的文本翻译,并且不会删除任何内容。 |
|
|
Eris · 纯虚拟成员有什么优势吗(除了他们可能防止的人为错误)? 3 年前 |
|
|
logonmanish · 虚拟com端口在Android上不工作 8 年前 |
|
|
AliS · 使用具有抽象基类指针的映射并调用派生类函数 10 年前 |
|
|
Philip Borgström · Java虚拟游戏板 10 年前 |
|
|
prestokeys · 具有完全可维护性的多重调度解决方案 11 年前 |
|
|
Nick_K · RTSP流到Windows 8上的虚拟视频设备 11 年前 |
|
|
Jay · 基于子类的属性对linq列表排序 12 年前 |
|
|
JLuc5 · C++父类,在两个不同的子类中实现了虚拟方法 12 年前 |