[PL] Chapter 10

subin·2024년 7월 20일

PL/프로그래밍언어

목록 보기
9/9
post-thumbnail
  • function(subprogram)의 linkage

    • 호출하고 리턴하는 2개의 과정을 합쳐서 말함
  • function 호출하고 return 할 때

    main() {
    	int x, y ,z; // 선언한 것을 실행프로그램으로 만드는 것은 컴파일러
    	z=30000;
    	x=100;
    	y=200; // 돌아와도 살아있어야 함
    	a();
    	b();
    	..
    }
    	
    a() {
    	c();
    	return;
    }
    • 함수 호출될때 필요한 것
      • method로 pass될 parameter
      • local 변수의 stack dynamic 할당
      • 호출 프로그램 실행 상태 저장 → control flow 돌아와도 변수값이 살아있어야함
      • control 이전, 리턴 처리
      • subprogram이 nesting 지원하면 non local 변수에 접근하는 방법이 필요함
    • 함수 리턴될 때 필요한 것
      • 리턴값 돌아와야함

      • 로컬변수 메모리 해제 해야함

      • 아까 실행중이던 상태로 돌아와함 → EP, SP 해제하고 원래 상태의 EP, SP 설정

      • 호출한 명령 다음부터 실행되어야함

    • EP: 현재 실행되고 있는 메모리의 시작값 (environment pointer)
    • SP: 메모리의 최대 값 (stack pointer)

Implementing “simple” sub program

모든 함수는 main이 호출하고 main으로 돌아온다, stack 변수는 없다. (이미 공간 할당된 static 변수만 있다.)

  • 구성요소
    Local Variable
    Parameter
    Return address

Implementing Subprograms with Stack-Dynamic Local Variables

  • static보다 stack dynamic일때 장점 2가지
    1. recursion 지원
    2. compiler가 암묵적으로 메모리 할당,해제 → 메모리 사용의 효율성
  • 구성요소
    Local variables
    Parameter
    Dynamic Link
    Return address
  • static scoping인 경우는 Static Link 필요

Nested Subprograms

  • 함수 안에 함수 들어가거나, 블록 안에 변수 선언되는 경우 ⇒ stack 변수는 신경 써야함 (동적으로 base address가 결정되기 때문에, offset은 컴파일러가 미리 알려줌 하지만 어디서부터 offset을 더할지는 runtime에 결정됨)
  • stack 변수 중 local 변수는 offset에 동적으로 EP 값을 더한 주소에 있음
  • stack 중 non local 변수만 신경 쓰면 됨
  • python처럼 함수안에 함수 있는 경우 함수는 모두 stack에 존재, inner function은 outer function의 변수에 접근 못함 → 그 변수가 사용되어있는 함수의 ARI 시작 주소를 알아야 함.
  • 변수의 참조(reference) 결정하는 방법
    • static scope
    • dynamic scope
  • 나를 호출하는 function의 base address(EP) 가리킨다.
  • dynamic depth: 나를 호출하는 함수의 개수
  • dynamic chain: dynamic link를 모아둔 것
  • 나를 포함하고 있는 function의 base address(EP) 가리킨다

  • static depth: 나를 둘러싸는 함수의 개수

  • static chain: static link를 모아둔 것

    (N, offset): N은 나의 ARI base주소로부터 떨어진 값, link타고 N만큼 간 곳에 접근하면 있다는 뜻.

implementing blocks

  • ARI에 static link, local variable만 있으면 됨

Dynamic scope 언어는 변수에 대한 주소 공간 관리를 어떻게 하는가?

  • Deep Access: non local 변수 접근 방법, dynamic depth 사용, dynamic link 를 사용
  • Shallow Access: 모든 변수에게 주소 공간 할당해 주는 것

Binding

  • static → runtime 전, compile 시 결정
  • dynamic → runtime에 결정

0개의 댓글