C++,java中空类的大小是多少?
2022-09-03 08:34:23
C++和Java中空类的大小是多少?为什么不是零? 如果是C++,则返回 1。sizeof();
C++和Java中空类的大小是多少?为什么不是零? 如果是C++,则返回 1。sizeof();
C++标准明确指出,类的大小不能为零。
由于每个对象都需要具有唯一的地址(也在标准中定义),因此您实际上不能拥有零大小的对象。
想象一个零大小的对象数组。由于它们的大小为零,因此它们将全部排列在同一地址位置。因此,更容易说对象不能具有零大小。
即使对象的大小不为零,如果它实际上占用零空间,也不需要增加派生类的大小:
例:
#include <iostream>
class A {};
class B {};
class C: public A, B {};
int main()
{
std::cout << sizeof(A) << "\n";
std::cout << sizeof(B) << "\n";
std::cout << sizeof(C) << "\n"; // Result is not 3 as intuitively expected.
}
g++ ty.cpp
./a.out
1
1
1
在 Java 案例中:
sizeof
Instrumentation
“空类”(即 )的实例的大小不为零,因为该实例具有与之关联的隐式状态。例如,需要状态:java.lang.Object
当前的热点 JVM 使用巧妙的技巧在占用两个 32 位字的对象标头中表示状态。(这在某些情况下会扩展;例如,当实际使用原始锁时,或者在调用之后。identityHashCode()
1 - 例如,由新 String(“hello”) 创建的字符串
对象的大小是否包括保存字符的支持数组的大小?从 JVM 的角度来看,该数组是一个单独的对象!