包含一个或多个虚函数的类的对象的大小

时间:2012-08-31 09:41:51

标签: c++

我想知道包含一个或多个虚函数(但只包含虚函数)的类的对象大小。每个人都说答案是4.但是当我试图在TCWIN45上运行这些代码时,我得到2作为输出。

code

3 个答案:

答案 0 :(得分:3)

从技术上讲,类对象的大小为未指定

请注意,动态调度的实现对于编译器是开放的。实现可以使用他们选择的任何机制,也不需要记录它。

大多数实现使用 虚拟表和指针 机制,其中虚拟指针被添加到每个类对象并增加了开销。也有可能增加其他尺寸的东西。

通常,

  

对象的大小=非静态数据成员的大小+填充字节+ vptr的大小(适用)

答案 1 :(得分:2)

“TCWIN45”是一个旧的16位编译器。在那里,每个指针是两个字节。典型的答案(4)适用于更常见的32位编译器。

答案 2 :(得分:0)

取决于它,它通常是指针的大小(4或8个字节),但在这种情况下,它很可能是全局表中的索引。编译器可能假设整个程序中不超过2 ^ 16个多态类。

编辑:不一定在整个程序中,但至少在当前的类层次结构中。