对象占用空间

1、对象分为字段和方法,字段分为:static,non-static。方法分为static,non-static,virtual

2、static字段,放在静态存储区,所有的对象共享。non-static字段,每个对象拥有自己的一份内存copy

3、static方法,non-static方法,virtual方法都放在代码区,所有的对象共享。调用方法的时候,如何区分方法内的数据是那个对象的呢?

  方法内的数据是方法绑定对象的数据,因为调用方法的时候,需要指定对象。对于virtual方法,还要增加一个额外指针,用于在运行时,根据对象的真实类型绑定方法。注意:就算有多个virtual方法,也只有一个额外指针。

4、因此,对象占用的空间大小就是:

  不存在virtual方法:就是实例字段的大小

  存在virtual方法(一个或多个)就是:实例字段的大小+virtual方法的额外指针

你可能感兴趣的:(对象)