13得票3回答
如果对象被转换为它们的实际类型,使用虚函数是否会产生任何费用?

我的理解是,虚函数会因为两个问题导致性能问题:vtable引起的额外解引用和编译器无法在多态代码中内联函数。 如果我将变量指针向下转换为其确切类型,那么是否仍然存在额外的成本? class Base { virtual void foo() = 0; }; class Derived : ...

8得票4回答
C++中的纯虚函数位于哪里?

纯虚函数位于哪个虚表中?是在基类还是派生类中? 例如,每个类中的虚表是什么样子的? class Base { virtual void f() =0; virtual void g(); } class Derived: public Base{ virtual voi...

12得票4回答
如何在导出C++类的DLL中使用延迟加载

我有一个DLL one.dll,它使用从two.dll导出的TwoClass类,通过class __declspec(dllexport)。 我想让one.dll使用/delayload来加载two.dll,但是我得到了链接错误:LINK : fatal error LNK1194: cann...

39得票6回答
vtable存储在内存的哪个位置?

vtable 存储在内存的哪个位置?

12得票2回答
C++中多态类中的虚函数表(vtable)使用gdb

如何使用指向基类对象的指针显示vtable,并且该对象具有虚函数?

9得票2回答
如何使用G++禁止为纯虚类生成C++ vtable?

在MSVC中,可以使用__declspec(novtable)属性来抑制C++虚函数表的生成。然而,似乎GNU C++编译器没有相应的属性。事实上,将纯虚类的虚函数表留下会不必要地链接__cxa_abort()等其他内容,我想避免这种情况发生,因为我正在为嵌入式系统编程。那么,我该怎么办呢? ...

10得票4回答
虚函数和多重继承情况下的对象布局

我最近在面试中被问到关于涉及虚函数和多重继承的对象布局问题。我解释了它在没有多重继承的情况下是如何实现的(即编译器如何生成虚表,在每个对象中插入一个指向虚表的秘密指针等)。但是,我感觉我的解释有点欠缺。以下是一些问题(见下面的示例): 类C的对象的确切内存布局。 C类的虚表项。 类A、B和...

23得票6回答
C++中vtable查找的性能影响

我正在评估将一款实时软件从C/汇编语言重写为C++/汇编语言(原因与问题无关的部分必须以汇编语言完成)。 每秒有3,000次中断,对于每个中断,需要按照顺序执行大约200个不同的操作。处理器运行速度为300 MHz,给我们100,000个周期来完成这项工作。通过一个函数指针数组,在C语言中已...

8得票5回答
在什么情况下,虚函数表指针可能为空(或为0x1)?

我目前正在调试一个崩溃日志。从崩溃日志中可以看出,由于一个(c++)对象的vtable指针为0x1,而该对象的其余部分似乎都正常。 当程序尝试调用虚方法时,就会崩溃。 我的问题是:在什么情况下vtable指针会变为空?operator delete会将vtable指针设置为空吗? 这发生...

33得票3回答
为什么虚函数不能使用返回类型推断?

n3797 文件的 § 7.1.6.4/14 节: 使用占位类型作为返回类型声明的函数不得是虚函数 (10.3)。 因此,以下程序是非法的:struct s { virtual auto foo() { } }; 关于这个原理,我所能找到的只有来自n3638...