728x90

스택 프레임

- 임의의 함수 내에서 선언된 메모리 공간

- Stack Pointer Register : 스택 프레임의 top 위치(어디까지 메모리를 할당했는지)를 기억하는 레지스터

- Frame Pointer Register

    -> 함수 호출 반환 후에 돌아갈 주소를 기억할 레지스터

    -> 함수 호출 반환 : Stack Pointer의 위치를 함수 호출 이전으로 옮기고 새로 함수 호출을 하면 메모리에 데이터를 덮어 씀

- 함수를 호출할 때마다 Frame Pointer에 Stack Pointer의 값을 백업하게 되면 이전 Stack Pointer의 값을 덮어쓰게 되기 때문에 스택에 저장함

    -> 함수를 호출할 때

1. 처음에는 FP와 SP가 가르키는 주소는 모두 0x00

2. main 함수를 호출하면 a, b의 할당으로 인해 SP의 주소는 0x08이 됨

3. fc1 함수를 호출하면 먼저 FP의 주소 값(0x00)이 SP의 주소(0x08)에 저장되고 FP의 주소는 SP의 주소(0x08)가 되고 SP의 주소는 0x0C가 됨

4. c,d의 할당으로 인해 SP의 주소는 0x14가 됨

5. fc2 함수를 호출하면 먼저 FP의 주소 값(0x08)이 SP의 주소(0x14)에 저장되고 FP의 주소는 SP의 주소(0x14)가 되고 SP의 주소는 0x18이 됨

6. e,f의 할당으로 인해 SP의 주소는 0x20이 됨 

 

    -> 함수를 반환할 때

1. fc2 함수 호출이 완료되면 FP에 저장된 주소(0x14)를 SP에 저장하고 0x14에 저장된 값(0x08)을 FP에 저장

2. fc1 함수 호출이 종료되면 FP에 저장된 주소(0x08)를 SP에 저장하고 0x08에 저장된 값(0x00)을 FP에 저장

3. main 함수 호출이 종료되면 FP에 저장된 주소(0x00)를 SP에 저장하고 FP도 0x00 값을 가짐

728x90

+ Recent posts