1 / 38

Chapter 8 – 영역과 수명

Chapter 8 – 영역과 수명. Outline 8.1 블록과 영역 8.2 정적 영역과 동적 영역 8.3 언어에서의 영역 8.4 변수의 수명 8.5 Ada 의 영역. 8.1 블록과 영역. 영역 (Scope) 식별자의 효력을 나타낼 수 있는 영역 식별자의 사용이 허락되는 프로그램의 범위 식별자 (Identifier) 변수 , 상수 , 레이블 , 자료형 , 부프로그램 등의 이름 수명 (Extent 또는 Life time)

gunda
Download Presentation

Chapter 8 – 영역과 수명

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Chapter 8 – 영역과 수명 Outline 8.1 블록과 영역 8.2 정적 영역과 동적 영역 8.3 언어에서의 영역 8.4 변수의 수명 8.5 Ada의 영역

  2. 8.1 블록과 영역 • 영역(Scope) • 식별자의 효력을 나타낼 수 있는 영역 식별자의 사용이 허락되는 프로그램의 범위 • 식별자(Identifier) 변수, 상수, 레이블, 자료형, 부프로그램 등의 이름 • 수명(Extent 또는 Life time) • 식별자(변수) 값을 보유할 기억장소가 배정되어 있는 실행시간 • 식별자의 기억장소 할당부터 해제까지의 기간

  3. ALGOL60 • integer x • 1) 컴파일 시간 • 2) 실행시간 x integer x integer 8.1 블록과 영역 • 식별자 영역 제공의 간결한 방법 - 모든 식별자를 전 프로그램에서 사용가능 (전역 변수화) 모든 프로그램에서 모든 식별자 공유 • 문제점 • 식별자 사용의 복잡화 • 식별자 혼돈 단위프로그램의 식별자 • 프로그램 합성 시 문제점 발생 (지역화 요구) • ALGOL 60 • begin-end사용 • 블록 구조(지역 식별자 선언 가능) 1) 블록 입구 - 기억장소 할당 2) 블록 출구 - 기억장소 해제 • 블록끼리는 nested또는 disjoint • 복합문(compound statement)과 대조

  4. 8.2 동적 영역과 정적 영역 • 정적 영역 규칙(static scope rule) - 식별자의 사용 영역을 블록의 정적 내포관계로 결정(컴파일러 언어) 1) 지역변수 - 현재 블록에서 선언된 변수, 형식매개변수 2) 비지역 변수 - 현재 블록에서 사용되나 바깥 블록에서 선언된 변수 3) 전역 변수 - 모든 블록에서 사용 가능한 변수 [참고] 자유변수(free variable) 현재 블록에서 선언되지 않고 사용되는 변수 [참고] 영역 구멍(hole-in-scope) 내포된 블록 사이에 동일 지역변수를 선언하면, 바깥 블록의 지역변수는 내부 블록 구간에서 사용할 수 없는 현상 지역 (local) 전역 (global)

  5. 1 a : begin integer i, j; real x, y; • b : procedure test(integer a, b) • begin boolean I; • . . . • x : = I * j +y; • . . . • end b; • . . . • c : begin integer x, y; real i, j; • d : begin boolean j; • . . . • call test(x, y); • . . . • end d; • . . • . . . • end a; b : procedure test(integer a, b) begin boolean i; . . . x : = i * j +y; . . . end b; c : begin integer x, y; real i, j; . . . d : begin boolean j; . . . call test(x, y); . . . end d; end c; d : begin boolean j; . . . call test(x, y); . . . end d; 8.2 동적 영역과 정적 영역 정적 영역 규칙 (Algol) <각 변수 영역 줄번호>

  6. 8.2 동적 영역과 정적 영역 • 정적 영역 규칙을 따른 변칙 현상(anomaly): • 영역 구멍(hole – in –scope) • 앞 페이지 예 a 에서 선언된 x처럼 전역 선언이 지역선언 때문에 보이지 않을 때 • 영역과 선언의 가시성(visibility)에 약간의 차이를 갖는다. • Ada와 Java에서는 영역 한정자에 의해 접근이 가능하다. • 예) 앞 페이지 예에서 : Ada 경우 • 블록 c에서 영역 구멍 상태 인 a 블록의 x 접근 a. x • 가시성 (visibility) 블록 c에서 a의 x를 볼 수 있다. : 선택에 의한 가시성

  7. 8.2 동적 영역과 정적 영역 • 동적 영역 규칙(dynamic scope rule) • 식별자의 영역이 실행시간에 확정 • 식별자의 사용 영역이 프로그램의 실행 순서에 의해 결정 • 인터프리터 언어에서 주로 사용

  8. 8.2 동적 영역과 정적 영역 • 동적 영역 규칙 사용 예 (APL에서) Z ← 0 X ← 0 주 프로그램 Y ← 0 SUB 2 : 2는 실 매개 변수 Z ← FUN Y : Y는 실 매개 변수, 결과를 Z에 배정 ▽ SUB I ; Y : I는 형식 매개 변수, Y는 지역 변수 부 프로그램 … X … SUB … Y … Z ← FUN N ; X ▽ • 1) 주 프로그램에서 SUB 2 호출 • <SUB> • X, Z : 전역 변수 (주 프로그램) • Y : 지역 변수 • SUB 에서 FUN N 호출 • <FUN> • Y : 비지역 변수 (SUB) • N, X : 지역 변수 • 2) 주 프로그램에서 FUN Y 호출 • <FUN> • Y : 전역 변수 (주 프로그램) • N, X : 지역 변수 ▽ R ← FUN N ; X : N는 형식 매개 변수 함수 :X는 지역, Y는 전역 변수 프로그램 … X … FUN … Y … ▽

  9. 8.2 동적 영역과 정적 영역 • 예제 8.1 영역규칙 적용 예 program scope; var a, b : integer; begin a := p; q; end scope 실행과정 1) scope 실행 2) 함수 p 호출, 실행 a = 0 (지역변수) b = 1 (비지역 scope변수) p = 2 (함수 이름) 반환 후 => scope의 a에 2 배정 3) 프로시져 q 호출, 실행 a = 3 (비지역 scope변수) b = 4 (지역변수) p = 5 (지역변수) 4) 프로시져 print 호출, 실행 ① 정적 영역 규칙 a : scope, b : scope, p : 함수 p 결과 : 3, 1, 2 ② 동적 영역 규칙 a : scope, b : 함수 q, p : 함수 q 결과 : 3, 4, 5 function p : integer; var a : integer; begin a := 0; b :=1; p := 2 end p; procedure print; begin write(a); write(b); writeln(p) end print; procedure q; var b, p : integer; begin a := 3; b := 4; p := 5; print end q;

  10. 8.3 주요 언어에서의 영역 • FORTRAN • 지역변수 자체 프로그램(MAIN, SUBROUTINE,또는 FUNCTION)에서 (명시적/묵시적)선언한 변수 사용 • 전역변수 COMMON문으로 선언 한 변수 • 예) C THIS IS THE MAIN PROGRAM COMMON /A/ X, Y, Z(10) COMMON GD, IRED, TEMP . . . END X, Y, Z(10)은 A2와 공유 GD, IRED, TEMP는 A1과 공유 SUBROUTINE A1(P, Q) COMMON XX, KRED, XTEMP . . . END SUBROUTINE A2(P, Q) COMMON /A/ G, H, Z(10) . . . END

  11. 8.3 주요 언어에서의 영역 • JOVIAL • ALGOL 58의 후계자 • 미국방성에서 주로 사용 • 정적 영역 규칙(블록 중심) • 분리 컴파일 허용 • COMPOOL (communications pool) • 각 모듈에게 자료, 프로시저, 정의 등의 공유를 제공 • COMPOOL을 사용해서 실행시간에매개변수 간의 형 검사 • PL/I • ALGOL 60의 후계자 • BEGIN..END 도입(블록 개념) • 묵시적 선언가능 -> 문제점 발생

  12. 8.3 주요 언어에서의 영역 • PL/1 영역 문제점 :PROCEDURE A END PEC; PEC :BEGIN; ··· B END A; : BEGIN; J = X; ① ··· C D END B; : BEGIN J = Y; ② ··· END C; • ① J : 프로시저 PEC에서 묵시적 선언 간주 • ② J : 프로그래머가 C에서 선언하여 사용한 • 것으로 간주 • ③ J의 해석 (?) • 묵시적 선언 => 변수 선언의 혼동 초래 :/* 여기서 J를 사용 */ ③

  13. 8.3 주요 언어에서의 영역 • ALGOL 68 • begin ... end블록 개념 일반화(문맥시작과 마침 기호 다양함) • 영역 블록 - 모든 문맥시작 기호와 문맥 마침 기호 사이 • 선언 • 블록 입구에서 선언 • 블록 끝에서 해제 => 영역 : 블록 단위 • 예) if-fi, then-else, else-fi, begin-end, loop–pool, case-esac 등 if fi then else

  14. 8.3 주요 언어에서의 영역 • Pascal • begin ... end도입 : 복합문 개념 - 영역 블록 아님 • 선언 - 프로시저, 함수 시작부 =>프로시저/함수가 영역 단위 • 프로시저 내포 가능 • 정적 영역 규칙 • 예) Pascal 영역 문제 호출 구조 1) A : A, B, D 2) B : A, B, C 3) C : A, B, C 4) D : A, B, D 변수 영역 - 정적 영역 규칙 예) B에서 선언된 변수 B : 지역변수 C : 비지역 변수 procedure A procedure B procedure C procedure D

  15. 8.3 주요 언어에서의 영역 • C, C++, Java에서의 영역 • Algol과 같은 블록 개념의 언어 • begin-end 대신에 중괄호 ( { ,} )를 사용하여 영역을 정의 { int a_outer = 2 ; printf ("%d\n", a_outer) ; { int a_inner = 5 ; printf ("%d\n", a_inner) ; } printf("%d\n", ++a_outer) ; } { int a = 2 ; /* outer block a */ print f ( “%d \n”, a) ; /* 2 is printed */ { int a = 5 ; /* inner block a */ printf (“%d\n”, a) ; /* 5 is printed */ } /*back to the outer block */ printf (“%d\n”, ++a) ; /* 3 is printed */ } 동등하다.

  16. 8.3 주요 언어에서의 영역 • C언어 영역 예 void p(void) { int a, b, x ; /* 블럭 p */ · · · { float x, y, z ; /* 다른 블럭 */ y = 1.5 ; /* 지역 변수 y */ a = 2 ; /* 비지역 변수 a, 즉 p의 a */ x = b * z ; /* 지역 변수 x, z, 비지역 변수 b*/ } · · · } 다른 블록에서: x, y, z : 지역변수 a, b : 비지역 변수 p의 x : 영역 구멍 상태

  17. 8.3 주요 언어에서의 영역 • C에서는 모든 함수 전체를 영역으로 하는 외부 영역 (external scope) 이 존재. 외부 영역만이 전역임 int i, j ; float x , y ; /* i, j, x, y는 전역 변수 */ void main (void) { int i, k ; /* i, k는 main 함수의 지역변수 */ float a, b, c ; /* a, b, c는 main 함수의 지역변수*/ · · · }

  18. 8.3 언어에서의 영역 • C++, Java • 변수 정의가 어디에서나 나타날 수 있다. (영역 : 정의문에서 함수 끝까지) • For문의 초기화식에 제어 변수가 정의되는 것을 허용 • 블록 구조를 통한 영역개념의 장점 ①지역성(locality)을 높여준다. 변수를 사용할 프로그램 가까이서 선언 ②운영 체제하에서 작은 working set 요구 크기가 작은 기억장소 요구 ③표준 패키지를 사용자 프로그램에 결합시켜 하나의 프로그램을 만들기 쉽다. ④프로그램의 구성을 단계적으로 세분화하는데 도움이 된다.

  19. X int 8.4 변수의 수명 (extent) • 수명(Extent 또는life time) 변수가 기억장소를 할당 받은 기간(실행시간) • Fortran 정적 기억장소 할당 변수 수명 = 프로그램수명

  20. 8.4 변수의 수명 (extent) • Algol 60 • 블록 단위 할당/해제 => 변수 수명 : 블록 시작 ~ 블록 종료(선언블록) • own 변수 • static 변수 => 변수 수명: 주 프로시저 시작 ~ 주 프로시저 종료 참고)변수 영역 : 선언블록 • 초기화는 한 번(첫 번째 진입 시) • own 형의 가변 배열 (?)

  21. 8.4 변수의 수명 (extent) • PL/1 • automatic : 수명 - 블록 진입 ~ 블록 탈출 • static : 수명 - 주 프로시저 진입 ~ 주 프로시저 탈출 • controlled : 수명 - allocate()실행~ free()실행 • based(stack 개념) : 수명 -allocate()실행 ~ free()실행 • 예) DECLARE 1 STUDENT BASED (P) 2 NAME CHARACTER(25) VARYING, 2 SNUMBER FIXED, 2 AGE FIXED, 2 MAJOR CHARACTER(10), 2 LINK POINTER; • STUDENT : 레코드형 이름 • P : STUDENT를 가리키는 포인터 • ALLOCATE(P) - 메모리 할당 • 연속적인 ALLOCATE(P) - 스택 개념 사용 • FREE(P) - 메모리 해제(스택에서 POP)

  22. 스택 사용 힙 사용 8.4 변수의 수명 (extent) • PL/1 기억 장소 요약 • 동적 수명 • 힙 기법 사용 • 주요언어 사용 예) Pascal - new() ~ dispose() PL/1 - ALLOCATE() ~ FREE() C - malloc() ~ free() C++ - new ~ delete

  23. 8.5 Ada 의 영역 • Ada 영역 단위 • 부프로그램(procedure, function) • 패키지(package) • 태스크(task) • 영역 단위 구조

  24. 8.5 Ada 의 영역 • 이름 한정(qualification)를 통해 영역구멍 상태인 식별자를 사용할 수 있다. 이름 한정(qualification)

  25. 8.4 변수의 수명 (extent) • 내포된 부 프로그램과 이름한정 예 (Ada) procedure HERE is begin … end HERE procedure THEN is A : REAL; B : REAL; begin … end THEN; procedure NOW is B : REAL; -- THEN. B가 숨겨짐 C : REAL; begin B := A; -- NOW.B := THEN.A C := THEN.B; -- NOW.C := THEN.B end NOW; • 지역/비지역 식별자 구분 • - 지역/비지역 식별자가 • 같은 경우 지역식별자를 • 한정하여 표현 • 블럭 이름.식별자

  26. 8.4 변수의 수명 (extent) package LOGICS is A, B, C : BOOLEAN; end LOGICS; • 식별자 이름한정 사용 예(Ada) procedure MAIN is Begin … end MAIN package NUMBERS is C, D, E : INTEGER; end NUMBERS; procedure DOSOMETHING is A, F : REAL; use LOGICS, NUMBERS begin -A는 DOSOMETHING.A -B는 LOGICS.B -D는 NUMBERS.D -E는 NUMBERS.E -F는 DOSOMETHING.F -C는 LOGICS.C 또는 NUMBERS.C end end DOSOMETHING

  27. 슬라이드 쇼가 끝났습니다.

  28. 용 어 정리

  29. 영역 (scope)

  30. 지역 (local)

  31. 전역 (global)

  32. 동적 영역 규칙 (dynamic scope rule)

  33. 가시성 (visibility)

  34. 수명 (lifetime)

  35. 이름 한정 (qualification)

  36. 식별자 (identifier)

  37. 복합문 (compound statement)

  38. 정적 영역 규칙 (staticscope rule)

More Related