(書きかけ)
「スタックとは」「ヒープとは」の説明を入れる予定。 とりあえず、デモ用のアプリだけ先に公開。
「値型と参照型」 の理解の手助け用。
スタックとヒープの挙動を模擬的にデモするような Silverlight アプリを作ってみました。
以下、使い方の説明。
疑似コードで記述されたプログラム。 コードの先頭から選択した行までの実行結果が右側に表示されます。
疑似コードの書き方は、 変数の宣言とインスタンスの生成、参照関係だけを記述する独自言語。
| 疑似コード | 説明 | 対応する C# の例 |
|---|---|---|
x = 100 | 新しい変数 x を用意して、値 100 を格納。 |
int x = 100;
|
a = new[8] | サイズ 8 バイトのインスタンスを生成して変数 a に格納。 | Point a = new Point(); |
c = new[8] { a b } | インスタンスを生成して c に格納。 このインスタンスは別のインスタンス a と b から参照されてる。 |
Point c = newPoint(); |
{ |
スコープ内で新しい変数 a を作成。 スコープを抜けると変数 a の持つ参照は無効になる。 |
{ |
左下の編集ボタンを押せば、疑似コードの編集ができます。 エラーチェックとかまるでしてなくて、文法違反なコードを書いたらその部分まるごと無視します。
スタックを模したもの。 変数の中身はここに格納されます。
ちなみに、このアプリ上ではスタックの深さは20。
ヒープを模したもの。 new したインスタンスはここに作成されます。
スタックからたどれるインスタンスはカラーで、 誰からも参照されなくなったインスタンスはグレーで表示。
Java や C# などのように、ガベージコレクションを持つ言語では、 誰からの参照されなくなったインスタンスもしばらくヒープ上に残ります。 ヒープの空き領域がなくなった時点でゴミ掃除が行われて、 誰も参照していない場所が解放されます。
このアプリ上ではヒープのサイズは400。
ちなみに、 疑似コードの構文解析は M を使ってるわけではなくて、 Silverlight 中では正規表現を使って実装しています。 MGrammer はお試しで書いたもの。