作者热门文章
- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
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/
我有一个特别的问题想要解决,我不确定是否可行,因为我找不到任何信息或正在完成的示例。基本上,我有: class ParentObject {}; class DerivedObject : publi
在我们的项目中,我们配置了虚 URL,以便用户可以在地址栏中输入虚 URL,这会将他们重定向到原始 URL。 例如: 如果用户输入'http://www.abc.com/partner ',它会将它们
我是一名优秀的程序员,十分优秀!