C++ 为什么 sizeof 不包含对象实例的地址大小?

C++ why doesn't sizeof include the address size of an object instance?

我只是想知道。如果创建一个没有数据的对象实例 A,则 class A 的大小为 1。C++ 要求它至少为 1 个字节。这不是我的问题。

问题:

A 的实例也有一个 64 位地址(如果是 64 位处理器)。为什么这个 64 位地址不包含在 sizeof 中?为什么不是 8 + 1 = 9?

示例:

#include <iostream>

class A {};

union B
{
    A a;
};

int main()
{
    A a;
    B b;

    std::cout << "Size of A: " << sizeof(a) << " Size of B: " << sizeof(b) << std::endl;

    std::cout << "Object A address: " << &a << " Size of Object A address: " << sizeof(&a) << std::endl; 
}

输出:

Size of A: 1 Size of B: 1
Object A address: 0x759c4d77611f Size of Object A address: 8

据我了解,如果创建 A 的实例,则会创建一个 64 位地址,并且数据紧跟在内存中的该地址之后。

所以它看起来像:

[一个实例 - 分配 8 个字节][1 个数据字节]

编辑:

这些人完全正确。我错了。创建的对象实例没有 64 位地址。数据本身在内存中。

如果创建指向对象的指针,则会创建 8 字节的内存分配,但对象实例本身不会创建 8 字节的指针。它只在内存中创建数据。

From what I understand, if you create an instance of A, you create a 64-bit address and the data immediately follows that address in memory.

没有。如果你创建一个 A 的实例,你就创建了一个 A 的实例。就是这样。

然后该对象的地址会告诉您该对象的位置。如果您获得该地址(如图所示 &)并将其保存到指针中,那么指针变量本身肯定会占用一些 space。但除此之外,没有。

sizeof 给出对象的大小。不是对象的大小,加上指针的大小。

不需要自动添加指针的大小。这实际上真的很烦人,因为你必须一直减去它才能让 sizeof 做一些有用的事情。

我想不出一个单一的用例来获取一个对象的组合大小,以及指向该对象的指针的大小,在一个数字中。