GC allocについてぼんやりしか知らなかったので調べてみた。
GC allocとは?
マネージヒープにオブジェクトを割り当てること
マネージヒープとは?
GCが管理するメモリ領域のこと。
スマホでアプリAを起動するとアプリAのプロセスが作成されて初期化されます。
初期化時GCは自身が管理する連続したメモリ領域を確保します。これをマネージヒープと呼びます。
C#の参照型はマネージヒープに割り当てられて管理されます。以下のようにHogeクラスをインスタンス化するとデータがマネージヒープ上に確保され、hoge変数がスタック領域に確保されます。
class Hoge
{
}
void Main()
{
Hoge hoge = new Hoge();
}
必要なメモリサイズ
64bit環境で参照型を管理するにはオブジェクトヘッダー(8byte)とメソッド情報へのポインタであるメソッドテーブルポインタ(8byte)が必要です。Hogeのような空のクラスをインスタンス化するとマネージヒープの16byteが確保されます。(32bit環境だと8byte)
クラスにメンバ変数が定義されていればそれらの型に必要なだけのsizeが追加で確保されます。例えばintのメンバ変数があれば4byte増えて全部で20byte確保されます。
参考