Perlについての質問箱 10箱目
■ このスレッドは過去ログ倉庫に格納されています
0220デフォルトの名無しさん
NGNG頂いたレスを元に自分なりに考えてみたのですが、
「局所」というものをブロック,eval,do,subなどのコード領域を意味するとして、
local(グローバル)変数の場合
コンパイル時には全ての変数をシンボルテーブルの頭から辿る中間コードを生成。
実行時
・局所に入る。
・local関数は新しい変数用と古いシンボルテーブルエントリ用のメモリ領域を作成し、
シンボルテーブルの該当箇所の アドレス値を新たなメモリ領域を指すように書き換え
・・・・・
・シンボルテーブルエントリを対比しておいた古い値のアドレス値に書き換え。
・GC発動(local指定された変数と待避用アドレス値の領域が参照カウント数に応じて
----おそらく----削除される)
・局所抜ける
my変数の場合
コンパイル時には局所専用シンボルテーブルのエントリを参照する中間コードを生成。
実行時
・局所に入る。
・my関数は新しいメモリ領域を作成し、局所専用シンボルテーブルの該当エントリに
そのアドレスを書き込む
・GC発動(local指定された変数と待避用アドレス値の領域が参照カウント数に応じて
削除される)
・局所抜ける
(局所専用シンボルテーブルはどの段階で作成されるのかという問題はあるけど)
概要はこんな感じでしょうか。
ちゃんとした理解には程遠いとは思いますが。。。
■ このスレッドは過去ログ倉庫に格納されています