繁体   English   中英

基于系统架构的C ++中的类大小

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM