Programming Language) Week7 -Memory binding & Variable Types

2737 ワード



1.Scope
-scope=変数にアクセスできる範囲
-visible=変数がアクセス可能であることを示します
-Static scope rule
-scoope:ブロック間のネスト関係
-非領域変数(non-local):最近ネストされたブロックに宣言された変数を使用してコンパイル時間範囲を決定します.
-Dynamic scope rule
-function call order
-非領域変数(non-local):関数呼び出しで変数を検索
-実行時に範囲を決定
Example )
    program scope_rule;
    	var x: integer;
        procedure sub1;
        begin 
        	print(x)
        end;
        procedure sub2; 
        	var x: integer;
            	begin 
                	x:=4;
                    sub1
                 end;
        begin 
        	x:=2;
            sub2
        end
**==>分析:scope rule>sub 1,sub 2
-ダイナミックレンジルール:print(x)=4//現在有効になっている他のサブルーチン変数にアクセスできるため、x=4
-静的役割ドメイン規則:print(x)=2//親領域の変数がアクセス可能であるため、x=2

Lifetime


ライフサイクル:メモリの割り当て時間(割り当てられた)からメモリの解放時間(戻る)
-block structur言語でscope=life
C、C++での静的
-scope = static, local to function
-ライフサイクル=プログラムが終了するまで
3)Referential Environment
-使用可能なデータ、変数名、関数などの環境参照
1)Static scope language=>領域変数+親領域のすべての変数にアクセス可能
2)Dynamic scope language=>領域変数+現在アクティブ化されている他のサブルーチンの変数
4)Memory binding & Variable Types
1.Static variables
-実行前のロード時にbindingが発生し、プログラムが終了するまで存在します.
-スタックに格納し、完了すると自動的にメモリを解放
-欠点)no再帰的で、変数がメモリ位置を共有できない
2.Stack-dynamic variables
-起動時にメモリを作成し、関数の終了時にメモリを自動的に解放します(Runtime stack)
-静的変数のno再帰的な欠点を補う->サブルーチンはローカル変数の自己メモリを必要とする(Recursive program)
3.Explicit heap-dynamic variables
-明示的なランタイム命令=>コマンドによるメモリの解放
Heapに格納され、コマンドでメモリが解放されていない場合は、ゴミになります(プログラムが終了すると、すべてのメモリが消えます)
-参照変数としてのみアクセス可能なポインタ
-コマンドを無効にする)C-malloc()、free()function/C+-new、deleteオペレータ