C++:由虚拟引起的内存开销?

Vin*_*ent 0 c++ memory inheritance

可能重复:
C++虚函数表内存开销

我很高兴看到:http://www.parashift.com/c++-faq-lite/virtual-functions.html,我想知道由于虚拟性导致的内存开销是多少.我正在为超级计算机编写优化代码,我必须在可读代码和内存消耗之间找到良好的平衡.

为了理解它是如何工作的,以下类的内存开销是:

class AbstractA {/* SOMETHING */};
class AbstractB {/* SOMETHING */};
class A : public AbstractA {/* SOMETHING */};
class B : public AbstractB {/* SOMETHING */};
class A2 : public A {/* SOMETHING */};
class B2 : public B {/* SOMETHING */};
class AbstractAB : public AbstractA, public AbstractB {/* SOMETHING */};
class AbstractAB2 : public AbstractAB {/* SOMETHING */};
Run Code Online (Sandbox Code Playgroud)

假设我每个类有10亿个对象,我不得不打扰非静态内存消耗.那么对于每种对象类型多少钱?(如果AbstractA的每个虚方法都会为"A"类型的每个对象创建一个指针,我就死...)

san*_*ank 5

您可能想看看Scott Meyer的更有效C++的第24项.它的标题是"了解虚函数,多重继承,虚基类和RTTI的成本".在这个项目中,迈耶斯讨论了使用这些设施所涉及的开销.

  • 我*可能*想看看你甚至没有给我阅读动机的东西?第24项中剩下的应该知道的是什么?请总结一下. (3认同)
  • @GManNickG我添加了标题和项目的一行摘要. (2认同)
  • @GManNickG:我的反应只是表现出对Sanket回答的不满.我同意,它缺乏具体细节,但可能会更礼貌地要求.对我来说,对这个问题的认真回答需要涵盖很多方面,而且已经由Scott Meyers完成了.我认为人们会认识到这一点,并保证这本书与问题的相关性(通过upvotes),希望提供阅读它的动力.然后,你的评论得到了几个赞成票,所以我可能错了. (2认同)