質問: UnityのC#でコードを組んでいて疑問に思ったことなのですが、 構造体はスタック領域を使うと書いてあるのですが、 Listに関しては記述がなく、値型でない限りは参照型になるので ヒープ領域を使うと思っています。 ### 質問 1. List<構造体>とした時は、どちらにメモリが確保されるのでしょうか? 2. また、スタックに確保されたか?ヒープに確保されたか?を知る方法はないでしょうか? ### 経緯 UnityのC#ではヒープ領域がガベージコレクションで解放されないため、 1度ヒープ領域が更新されるとアプリを落とすまでヒープを確保し続け アプリの確保メモリが非常に大きくなるため、スタックに移行できるものが あればスタックに移行したいと思い、このような質問をしました。 ### 環境 * Unity 5.0.1f1 * .NET 2.0 * C# 4.0
回答: > > 構造体はスタック領域を使う > > > は正確ではありません。 構造体は置かれた場所をそのまま使うと言えばいいでしょうか。ローカル変数として構造体を宣言した場合、ローカル変数はスタックを使うため構造体はスタックを使うと言えます。しかし、クラスメンバーとした場合、そのクラス内に存在するだけで、クラスがどこに配置されたかに依存します。(そしてクラスはヒープを使うため構造体もヒープ上に存在することになります。)