Size of class with virtual function adds extra 4 bytes(具有虚函数的类的大小增加了额外的 4 个字节)
问题描述
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
OneVirtual:16
两个虚拟:16
NoVirtual: 4
void* : 8
OneVirtual: 16
TwoVirtuals: 16
问题是:
由于 OneVirtual 和 TwoVirtuals 类具有虚函数,类的大小应为 sizeof(int) + sizeof(void*) 即 12 字节.但大小打印为 16 字节.
Since OneVirtual and TwoVirtuals class have virtual function, size of class should be sizeof(int) + sizeof(void*) i.e. 12bytes. But size is printed as 16bytes.
谁能解释一下原因?
推荐答案
我假设你是在 64 位机器上编译,因为 int 的大小是 4 字节.对于 64 位机器,指针大小通常是 8 字节,int 大小是 4 字节.满足 数据对齐要求 以节省读取周期编译器添加了额外的 4 个字节(填充),因此结果是 16 个字节,而实际需要的大小是 12 个字节.
I assume you are compiling on 64bit machines since size of int is 4bytes.Typically for 64bit machines pointer size will be 8 bytes and int size is 4 bytes.To satisfy Data Alignment requirement to save read cycles compiler adds extra 4 bytes(padding) hence result is 16bytes where as actual required size is 12 bytes.
这篇关于具有虚函数的类的大小增加了额外的 4 个字节的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:具有虚函数的类的大小增加了额外的 4 个字节
基础教程推荐
- C++ 标准:取消引用 NULL 指针以获取引用? 2021-01-01
- 如何定义双括号/双迭代器运算符,类似于向量的向量? 2022-01-01
- C++,'if' 表达式中的变量声明 2021-01-01
- 您如何将 CreateThread 用于属于类成员的函数? 2021-01-01
- 调用std::Package_TASK::Get_Future()时可能出现争用情况 2022-12-17
- C++ 程序在执行 std::string 分配时总是崩溃 2022-01-01
- 如何在 C++ 中处理或避免堆栈溢出 2022-01-01
- 运算符重载的基本规则和习语是什么? 2022-10-31
- 设计字符串本地化的最佳方法 2022-01-01
- 什么是T&&(双与号)在 C++11 中是什么意思? 2022-11-04