JAVAとBREWのソース互換性について004

まず、ObjectクラスはObjectDataクラスへのポインタを持つ。
メソッドへのアドレスポインタが自動的に追加されるので、合計8バイト。
ArrayクラスはObjectクラスを継承し、特に変数を足していないので結局合計は8バイト
 
次にObjectDataクラスは、自分への参照数を保持する参照カウンタを持つ。
メソッドへのアドレスポインタが自動的に追加されるので、合計8バイト。
ArrayDataクラスはObjectDataクラスを継承し、配列へのポインタ(T* m_aData)と配列の長さを保持するint変数を追加してあるので結局合計は16バイト
 
重いなぁ…。
16*16の二次元配列を確保しようとすると、こうなる。
Array> 型が1個。
Array 型が16個。
それぞれ中にArrayData型を持つことになるので、16バイト*17個
Array型自体も16個持つことになるので、8バイト*16個
合計400バイトほど損。実際はクラスの配列を取ろうとするとさらに4バイト余計に食う。
1024バイトの配列を取ろうとして、404バイトも損を出すのかぁ…。
 
3次元配列だともっと顕著で、16384バイトの配列をとろうとして6612バイトも損を出す。
厳しい。