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
做一些有用的事情。
我想不出一个单一的用例来获取一个对象的组合大小,以及指向该对象的指针的大小,在一个数字中。
我只是想知道。如果创建一个没有数据的对象实例 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
做一些有用的事情。
我想不出一个单一的用例来获取一个对象的组合大小,以及指向该对象的指针的大小,在一个数字中。