【发布时间】:2012-05-07 05:12:24
【问题描述】:
我刚刚读到: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 */};
假设我每个类有十亿个对象,我不得不担心非静态内存消耗。那么每种对象类型的费用是多少? (如果 AbstractA 的每个虚方法都会为每个“A”类型的对象创建一个指针,那我就死定了……)
【问题讨论】:
-
sizeof()运算符的存在是有原因的。 -
@Mystical:这只会告诉您每个对象的成本。通常也有按课程收费。
-
@MikeSeymour 如果每个类有十亿个实例,那么每个类的成本对于每个对象的成本都可以忽略不计。
标签: c++ memory inheritance