BeInteractive!

まずは、ConquestArrowさんのエントリ「AS3のスコープとint/uint型の宣言で基本的なところが解っていなかった件」を見て欲しい。

ここで重要なのは、「ActionScriptのローカル変数は、関数単位で管理されている」ということ。ブロック単位とかスコープ単位じゃありません。関数ユニークなので、同じ関数内で同名のローカル変数を宣言すると、ブロックが違っていても、「重複してる」とか言ってコンパイラに怒られるわけですね。

実際、JITの結果なんかを見てると、全てのローカル変数は、宣言(var)位置に関係なく、その関数に入る時に全て初期化され、returnするまでずっと生きてるようなコードが生成されている気がします(ちゃんと調べてないので曖昧にしとく)。ちなみに、ローカル変数は特別に、「レジスタ」と呼ばれる超高速にアクセスできる領域に格納されてます。更に、ローカル変数の中でも若い番号(0-4ぐらい)のレジスタに割り当てられた変数は、レジスタを読み書きするためのバイトコード命令にその番号専用の命令が用意されているというVIP待遇なので、ナノミリ秒ぐらいのレベルで他の変数より早く演算が出来るようになります。

話にちょっとまとまりが無くなってしまったけど、この辺テストに出るかもね。

この記事へのトラックバック

Skunzo.log:System.gc でガーベッジコレクタの動きを試してみる...

TrackBack URL:

http://www.be-interactive.org/trackback.php?id=244

この記事へのコメント

コメントはありません。

コメント書き込み:

カテゴリ

タグ

アーカイブ