책너두 (컴퓨터 밑바닥의 비밀) 14일차 스택 영역

  • 함수 호출 활동 추적 : 스택
  • 스택은 후입선출 순서의 데이터 구조임.
    • 이진 트리 탐색으로 볼 수 있음.
    • 트리 구조의 순회는 재귀 뿐만 아니라 스택으로도 사용 가능함.
  • 스택 프레임 & 스택 영역
  • 함수 실행 시, 작은 상자가 필요함.
    • 이 작은 상자를 스택 프레임, 호출 스택이라고 함.
    • 이 스택에는 함수 호출 정보가 필요함.
  • 함수 점프와 반환
  • 함수 A가 함수 B를 호출하면 제어권이 함수 A에서 함수 B로 옮겨짐.
    • 제어권이란 실제로 CPU가 어떤 함수에 속하는 기계 명령어를 실행하는지를 의미함.
  • 제어권이 이전될 때는 다음 두 가지 정보가 필요함.
    • 반환(return) : 어디에서 왔는지에 대한 정보
      • 함수 A의 기계 명령어가 어디까지 실행되었는지
    • 점프(jump) : 어디로 가는지에 대한 정보
      • 함수 B의 첫 번째 기계 명령어가 위치한 주소
  • 매개 변수 전달과 반환 값은 어떻게 구현될까?
  • 함수 호출할 때 매개 변수는 CPU의 레지스터에 저장할 수 있음.
    • 그러나 CPU 내부 레지스터 수가 제한되어 있어 제약이 생기면 나머지 매개 변수를 스택 프레임에 직접 넣을 수 있음.
  • 지역 변수
  • 지역 변수도 마찬가지로 레지스터에 저장될 수 있지만, 레지스터 수가 부족하면 이 변수들도 스택 프레임에 저장되어야 함.
  • 레지스터 저장과 복원
  • 레지스터에 지역변수를 저장하면 여러 함수에서 이 레지스터를 사용할 경우, 덮어쓰는 문제가 있을 수 있음.
  • 그래서 레지스터에 지역 변수를 저장하기 전에, 반드시 먼저 레지스터에 저장되었던 초기값을 꺼냈다가 레지스터를 사용하고 나면 다시 그 초기값을 저장해야 함.

댓글

Designed by JB FACTORY