見出し画像

Unityのメモリー管理

unityではユーザーが書いたコードには自動メモリ管理をしていて、値型のローカル変数などが割当たる。ヒープと呼ばれる領域には大きなデータとストレージが割当たるらしい。このうち、ヒープに対してガベージコレクターというやつが自動的に未使用のものを掃除するぽい。

掃除とは定期的に未使用のヒープメモリーを監視し割り当てを解除すること。解除された領域には再度変数等の割当が行えるようになるので、メモリの消費増大を抑える働きと認識。メモリを管理するガベージコレクターは自動的に実行される。

しかし、このガベージコレクターの処理はヒープメモリ内のすべてのオブジェクトを識別する動きをするらしく、ヒープメモリの増大はゲームの遅延や中断を招く可能性。
メモリを効率的に処理できるようなコーディング方法も必要になりそうだ。

オブジェクトが生成されるタイミングでプロジェクト設定で選択したスクリプトランタイム(monoかIL2CPP)が自動的にそのオブジェクトに必要なメモリを割り当てて管理する。それはヒープと呼ばれる中央メモリから割り当てられるとある。

unityの自動メモリ管理は手動でメモリの解放を指示する必要が無い。オブジェクトが使用され無くなったら、ガベージコレクターによって定期的に開放されるので、再利用して別の用途に割り当てる事ができるようになる。この指示を関数とかから指示する必要は無い

ヒープメモリとして割り当てられた領域はunityでは開放しないらしい。その大部分の領域が空な状態でもその領域を確保し続ける。
より大きなメモリ領域の再拡張が必要になった時に、ヒープメモリの再拡張が行われないようにしている。

この記事が気に入ったらサポートをしてみませんか?