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

Class size in c++ based on system architecture

本文关键字:c++ 于系统 系统      更新时间:2023-10-16

我创建了一个简单的类,并有一个带有虚拟函数的数据成员。下面我粘贴了代码以供参考。

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和vpointer分别为4字节和8字节)。但当我以64位可执行文件的形式运行程序时,我得到了16个字节。我不明白额外的4个字节是从哪里来的。我正在使用xcode并运行macOS10.8。

独立于sizeof(int)(其系统相关-->https://blogs.oracle.com/nike/entry/ilp64_lp64_llp64(@ruenvb感谢链接),例如64位Windows使用4字节表示整数)编译器可能会将类填充到最大非结构成员的倍数(在这种情况下,由于vtable指针,为8字节)。

这是为了确保对成员的访问在特定地址对齐,以提高性能,并防止可能导致某些CPU出现硬件异常的未对齐数据访问。