gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-28 00:23:56 25 4
gpt4 key购买 nike

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

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对于 vpointer)。但是当我将程序作为 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 上的硬件异常的未对齐数据访问。

关于c++ - 基于系统架构的 C++ 中的类大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26037624/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com