1 분 소요

스택

프로시저 호출 시
지역 변수와 매개변수를 저장하기 위한 메모리 공간
선언되는 순서와 반대로 메모리가 해제되는 LIFO(Last in First Out) 구조를 가짐
(이는 자료구조의 ‘스택’과 동일)

  • 용도
    각 함수 호출 시, 그 함수의 로컬 변수가 스택에 저장된다
    함수가 다른 함수를 호출할 때, 반환 주소와 이전 함수의 스택 프레임 정보가
    스택에 저장된다
  • 장점
    동적으로 메모리를 할당하고 해제 가능
    구현이 간단하고, 메모리 관리의 오버헤드가 낮음

  • 스택 프레임?
    함수 호출를 호출할 때, 함수가 레지스터에 저장할 수 있는 개수 이상의 공간을
    필요로 하면 그 공간을 스택에 할당(이것이 스택 프레임 혹은 함수 프레임)
    현재 실행중인 프로시저에 대한 프레임이 스택의 ‘맨 위(top)’에 위치

    프로시저가 다른 프로시저를 호출 시, ‘리턴 주소’를 스택에 푸시하여
    해당 프로시저가 리턴할 때, 원래 프로시저에서 재시작할 위치를 가리키도록 한다

  • 꼬리 재귀 최적화(Tail recursion Optimization)
    꼬리 재귀 최적화는 재귀 함수 호출 시, 호출 스택의 사용을 최적화하는 기법
    재귀 함수 호출 시마다 스택 프레임이 생성되며,
    이는 메모리 사용량 증가 및 스택 오버플로우의 원인이 됨

    꼬리 재귀 최적화는 ‘재귀 함수’의 마지막 연산만 호출 스택에 남기며,
    나머지는 제거함
    => 함수 반환 시, 호출 스택을 재사용할 수 있음

    꼬리 재귀는 반환값을 ‘return’하기 보다, 파라미터로 전달하여
    호출 스택이 ‘쌓이지 않고’ 후속 재귀를 호출한다

    마지막 호출에서 스택 프레임을 재활용 하여, 메모리 사용량을 유지하는 기법

레지스터

프로세서 내부의 고속 작동 메모리로, 프로시저 실행 중 자주 접근하는
변수나 중간 계산값 저장을 위해 사용

  • 용도
    연산 중 생성되는 중간 값들을 빠르게 저장하고 접근하기 위해 사용
    특정 데이터나 주소를 빠르게 저장하고 로드하기 위해 사용
  • 장점
    매우 높은 데이터 접근 속도
    데이터를 메모리로부터 레지스터로 빠르게 이동시킬 수 있어 연산 효율이 증가

댓글남기기