>>183
値型と参照型の区別はついてる?
値型の変数には値型全体を表すためのメモリが割り当てられる
参照型の変数は参照先を示す値(=IntPtr)分だけメモリが割り当てられて、実際のインスタンスはヒープ中に割り当てられる
少し違う話になるけど、配列の場合について、要素が値型か参照型かでの図があったので貼っとく
https://www.atmarkit.co.jp/fdotnet/csharp_abc/csharp_abc_005/csharp_abc02.html

例示されたAの場合、
まずbはstaticなのでどこかには確保される、詳しくは俺は知らない
A型のインスタンスは、Aが参照型なのでヒープ中に割り当てられる
aは値型なのでA型インスタンスの中に割り当てられる(=ヒープ)
clsは多分参照型だと思うけど、A型インスタンスの中には参照先を保持する分だけ割り当てられて(=ヒープ)、実体はヒープの別の箇所に割り当てられる

もっともC#だけで完結するコードなら、この辺の事柄は気にしなくてもいいとは思う
P/Invokeやunsafeを触りだしたら必要かもしれない