1

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

代码

4

3 回答 3

3

从技术上讲,类对象的大小是Unspecified

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

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

通常,

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

于 2012-08-31T09:42:43.850 回答
2

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

于 2012-08-31T11:28:22.410 回答
0

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

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

于 2012-08-31T09:45:57.990 回答