[英]Class size in c++ based on system architecture
我创建了一个简单的类,并具有带有虚拟函数的数据成员。 下面我粘贴了代码以供参考。
class base
{
public:
int i;
virtual void foo()
{
}
base()
{
cout << "constructing a base" << endl;
}
~base()
{
cout << "destroying the base" << endl;
}
};
根据我对以上基于体系结构的示例的理解,在32位计算机上,类大小为8字节(int为4字节,vpointer为4字节),在64位计算机上为12字节(int为4字节,vpointer为8字节) 。 但是当我将程序作为64位可执行文件运行时,我得到16个字节。 我无法理解哪里还有4个字节。 我正在使用xcode并运行mac OS 10.8。
独立于sizeof(int)
(取决于系统-> https://blogs.oracle.com/nike/entry/ilp64_lp64_llp64(@rubenvb感谢您的链接),例如64位Windows使用4Byte作为整数),编译器可以填充类可用于最大的非结构成员的多个(在本例中为8字节,因为vtable指针)。
这是为了确保对成员的访问在特定地址处对齐以提高性能,并防止未对齐的数据访问可能导致某些CPU出现硬件异常。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.