为什么编译器(比如 javac)必须知道对象的大小?

Why a compiler ( say javac ) has to know the size of the object?

我想知道为什么编译器必须知道对象的大小 (class)。我的意思是不能将它推迟到运行时 - 当真正需要对象时?

谢谢

Javac 知道对象的大小。 JVM 抽象掉了这些细节。

在 C 或 C++ 等本机编译语言中,当将对象包含在更大的结构中或在堆栈上分配对象时,编译器必须知道对象的大小。*在堆分配的情况下,可能拥有一个动态大小的对象,尽管这是非常危险的,而且很难做到正确。在 C 中,这通常是通过以空数组结束结构然后分配额外的 space.

来完成的

Rust 实际上区分了大小已知和未知的类型。后者只能在有限的情况下使用。 C/C++ 与不完整类型有类似的概念,它们基本上只能用作不透明指针。

* 从技术上讲,C 确实允许在堆栈上使用可变大小的数组。