6
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

GC allocとは

Posted at

GC allocについてぼんやりしか知らなかったので調べてみた。

GC allocとは?

マネージヒープにオブジェクトを割り当てること

マネージヒープとは?

GCが管理するメモリ領域のこと。

スマホでアプリAを起動するとアプリAのプロセスが作成されて初期化されます。
初期化時GCは自身が管理する連続したメモリ領域を確保します。これをマネージヒープと呼びます。
スクリーンショット 2020-02-15 0.54.40.png

C#の参照型はマネージヒープに割り当てられて管理されます。以下のようにHogeクラスをインスタンス化するとデータがマネージヒープ上に確保され、hoge変数がスタック領域に確保されます。

class Hoge
{
}

void Main()
{
    Hoge hoge = new Hoge();
}
スクリーンショット 2020-02-15 20.37.05.png

必要なメモリサイズ

64bit環境で参照型を管理するにはオブジェクトヘッダー(8byte)とメソッド情報へのポインタであるメソッドテーブルポインタ(8byte)が必要です。Hogeのような空のクラスをインスタンス化するとマネージヒープの16byteが確保されます。(32bit環境だと8byte)
クラスにメンバ変数が定義されていればそれらの型に必要なだけのsizeが追加で確保されます。例えばintのメンバ変数があれば4byte増えて全部で20byte確保されます。
スクリーンショット 2020-02-15 20.52.39.png

参考

6
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?