質問: 以上、宜しくお願いします。
回答: static (スタティック)領域でなくスタック領域のことでしょうか? C# のメモリ管理 がわかりやすいと思いますが、C# ではローカル変数はスタック領域にメモリが確保されます。 ただし、値型(構造体、数値など)はすべてスタックに置かれますが、参照型は参照(ポインタ)のみスタックに置かれ、実体はヒープに置かれます。 byte は値型ですが、byte] は参照型なので(参考:[値型と参照型)、ArrayByteB は参照のみがスタックに置かれ、配列の中身はヒープに置かれます。 よって、ArrayByteA と ArrayByteB はどちらも実体はヒープに置かれ、フィールドである ArrayByteA の参照はヒープに、ローカル変数である ArrayByteB の参照はスタックに原則置かれるはずです。ただし、コンパイラの最適化などによって原則が破られた場合を除きます。 ### 追記 質問に答えていませんでした。 Q1) staic領域の実行時間がヒープ領域の実行時間に比べて大きくなる原因は? 誤差です。 Q2) 上記の何れの場合も、ガーベージコレクションの対象になりますか? ローカル変数は、メソッドが終了し、なおかつ他から参照されていなければガベージコレクションの対象になります。 フィールドは、オブジェクトが解体され、なおかつ他から参照されていなければガベージコレクションの対象になります。 Q3) 配列にアクセス中にも、ガーベージコレクションを行いますか? アクセスできているということは、参照が生きているということなので、ガベージコレクションの対象にはなりません。