首页 > 试题广场 >

在32位系统中,下面代码打印结果为()class Base&

[单选题]
在32位系统中,下面代码打印结果为()
class Base {
char data[3];
public:
    virtual void f() { cout << "Base::f" << endl; }
    virtual void g() { cout << "Base::g" << endl; }
    virtual void h() { cout << "Base::h" << endl; }
};
int main() {
    cout << sizeof(Base)<< endl;
    return 0;
}
  • 6
  • 7
  • 8
  • 9
https://www.cnblogs.com/clover-toeic/p/3853132.html
发表于 2019-09-28 23:36:11 回复(0)
data[3]占3个字节,因后面有虚函数,应开辟空间存放虚函数指针,虚函数指针占4个字节,data中剩余的一个字节不够,重新开辟4字节并且data中空出一个字节对齐,因此sizeof(Base) = (3 * sizeof(char) + 1(空余一个字节,进行对齐))+ 4(虚函数指针)
发表于 2020-07-29 20:46:20 回复(0)

data[3]每个一字节   [0] [1] [2] ,然后4字节对齐,后面的虚函数指针>剩下的1字节   所以空余一个字节,再开辟4个字节   后面的是虚函数一个虚函数表指针4字节    一共是8字节  =3(data*3)+1(空余一个  对齐)+4(虚函数表指针)
编辑于 2019-09-03 18:50:16 回复(3)
无论有多少个虚函数,都只是提供一个虚函数表指针,简单理解,只算一个指针内存,其他就是字节对齐问题了~
编辑于 2021-04-29 21:46:14 回复(4)
char数组为3+1(补齐)+虚指针4(因为为32位),最大字节数为4,需要补齐一位(我忘了,选了7),最后结果为8
发表于 2021-04-16 16:51:25 回复(2)
这是为何?
发表于 2022-03-19 18:04:21 回复(3)
char为4,虚指针为4。补齐8
发表于 2022-01-17 23:26:35 回复(0)
有一个想法不知道对不对,data[3] 占3字节,f、g、h占四字节,但c++存在内存对齐的情况,所以实际情况下是data占3+1=4字节,后面的函数占4字节,加起来就有8字节了。
发表于 2019-08-30 09:24:55 回复(1)