Assembly 引用类型的对象数组如何存储在内存中?

Assembly 引用类型的对象数组如何存储在内存中?,assembly,x86,compiler-construction,javali,Assembly,X86,Compiler Construction,Javali,据我了解,, 当创建长度为10的基本体int对象的新数组时,会为10*4=40字节保留一个内存区域 现在我的问题是,当创建引用类型的对象数组时,例如来自类A的对象(如下所述),数组中存储了什么?是对象本身,带有指向vtable和所有字段的指针,还是数组只是由指向其他地方对象的指针组成 下面是另一个问题,我是否可以将A类型的对象存储在B类型的对象数组中,或者反之亦然 class A { int a; int b; int foo(int x){ return x*x;

据我了解,, 当创建长度为10的基本体
int
对象的新数组时,会为
10*4=40
字节保留一个内存区域

现在我的问题是,当创建引用类型的对象数组时,例如来自类A的对象(如下所述),数组中存储了什么?是对象本身,带有指向vtable和所有字段的指针,还是数组只是由指向其他地方对象的指针组成

下面是另一个问题,我是否可以将A类型的对象存储在B类型的对象数组中,或者反之亦然

class A {
   int a;
   int b;
   int foo(int x){
      return x*x;
   }
}
class B extends A {
   int c;
}

没有引用数组。看见如果您只是指对象数组,那么是的,整个对象的存储在数组中分配。PS:哦,等等,你的代码不是C++。请用适当的语言标记。@Jester实际上是它的Javali(),我们的讲师使用的一种教育语言。因此,我认为答案是这是一个实现的问题?@heysamhey主要是,这是一个编译语言及其语义的问题。因为我不熟悉Javali,所以我不确定它到底是如何工作的。在Java中,本机内存消耗要高得多(因为内存管理是“自动”的,您无法控制它),所以10个整数的数组将需要40字节+额外的元数据(其中一些可能直接在数组旁边,一些可能在java虚拟机内支持GC等)。简单的10×4是真实的,只有在语言/内存类型抽象保证为零成本的语言中,比如C++或C++。因为你的语言是某种混合,而且实现常常被学生留在,所以很难告诉你…(通常“参考”是指针)