gpt4 book ai didi

c++ - 具有虚函数的类的大小增加了额外的 4 个字节

转载 作者:搜寻专家 更新时间:2023-10-31 01:30:26 24 4
gpt4 key购买 nike

    class NoVirtual {
int a;
public:
void x() const {}
int i() const { return 1; }
};

class OneVirtual {
int a;
public:
virtual void x() const {}
int i() const { return 1; }
};

class TwoVirtuals {
int a;
public:
virtual void x() const {}
virtual int i() const { return 1; }
};

int main() {
cout << "int: " << sizeof(int) << endl;
cout << "NoVirtual: "
<< sizeof(NoVirtual) << endl;
cout << "void* : " << sizeof(void*) << endl;
cout << "OneVirtual: "
<< sizeof(OneVirtual) << endl;
cout << "TwoVirtuals: "
<< sizeof(TwoVirtuals) << endl;

return 0;
}

输出是:

无虚拟:4
无效*:8
一个虚拟:16
双虚拟:16

问题是:

由于 OneVirtual 和 TwoVirtuals 类有虚函数,类的大小应该是 sizeof(int) + sizeof(void*) 即 12bytes。但是大小打印为 16 字节。

谁能解释一下为什么?

最佳答案

我假设你在 64 位机器上编译,因为 int 的大小是 4 字节。通常对于 64 位机器指针大小是 8 字节,int 大小是 4 字节。为了满足 Data Alignment requirement节省阅读周期编译器添加了额外的 4 个字节(填充),因此结果为 16 字节,而实际需要的大小为 12 字节。

关于c++ - 具有虚函数的类的大小增加了额外的 4 个字节,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47968348/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com