ISA와 어셈블리
함수 안에서 프레임 포인터(RISC-V에서는 s0/fp)를 사용하는 이점으로 올바른 것은?
- A레지스터를 1개 추가로 쓰지 않아도 되므로 성능이 반드시 올라간다
- B함수 도중에 sp가 움직여도 지역 변수나 인자를 고정된 거리로 지정할 수 있고, 디버거도 호출 연쇄를 따라가기 쉽다
- C스택 영역이 자동으로 커져 넘치지 않게 된다
정답과 해설 보기
정답: B. 함수 도중에 sp가 움직여도 지역 변수나 인자를 고정된 거리로 지정할 수 있고, 디버거도 호출 연쇄를 따라가기 쉽다
프레임 포인터는 함수에 진입한 시점의 스택 위치를 가리킨 채 움직이지 않는 레지스터입니다. 가변 길이 배열 등으로 sp가 도중에 바뀌어도 지역 변수를 'fp에서 몇 바이트'로 지정할 수 있습니다. 또한 각 프레임에 이전 fp를 저장해 두면, 이를 따라가서 호출 연쇄(백트레이스)를 얻을 수 있습니다. 다만 레지스터를 1개 차지하므로 최적화에서는 생략되는 경우도 많습니다.