|
1
0
不。
因此,这种优化消除了一个指针分配(在构造函数代码的生成部分),以及vtable本身的一点空间。对你的目标没有多大用处 每个对象 优化,因为它只做小的 每班 优化。 如果您不自己创建基实例,也不在构造函数/析构函数中调用虚方法,那么它将起作用。 通过使虚函数调用成为非虚函数而省略虚函数调用是完全不同的。它叫 非理想化 . 当编译器可以确定使用哪个类的实例时,它用非虚调用替换虚拟调用。
关于vtable指针是第一个成员的假设,这可能是错误的。如果基类没有vtable,但是有一些数据成员,那么vtable指针将不是第一个指针。也可能有多个vtable指针。 要以编程方式分析转储中的结构,我建议使用适当的api。有两个API: DIA SDK 和 dbghelp functions . 它们是相似的,但是第一个是基于对象的(com),第二个只是简单的api,所以第一个可能更容易使用。 由于heap_stat脚本的方法固有的局限性,我建议使用heap分析 UMDH 相反,它完全不依赖vtable,并显示各种对象 |
|
2
0
同时,我找到了一个非常简单的方法
为了找到所有尚未虚拟的析构函数,我在开发目录中的ubuntu应用程序中启动了以下命令:
在将所有析构函数声明为virtual之后,我计划进行一些性能测试(我相信将一个方法声明为virtual可能会影响速度,因为方法声明已经更改,特别是对于一个负载很重的服务器应用程序),我将继续这篇文章日期。 |