ISA와 어셈블리
RISC-V의 표준 호출 규약에서는 함수에 진입할 때의 스택 포인터 sp를 16바이트의 배수로 맞추게 되어 있다. 그 이유로 가장 적절한 것은?
- A스택 용량이 16바이트의 배수가 아니면 OS가 부팅하지 않기 때문
- Bsp의 하위 4비트에 함수 번호를 기록하기 때문
- C16바이트까지의 큰 데이터를 스택에 두어도 경계를 넘지 않고 효율적으로 읽고 쓸 수 있기 때문
정답과 해설 보기
정답: C. 16바이트까지의 큰 데이터를 스택에 두어도 경계를 넘지 않고 효율적으로 읽고 쓸 수 있기 때문
데이터는 크기의 배수 주소에 두면(정렬하면) 경계를 넘지 않고 한 번에 읽고 쓸 수 있습니다. sp를 항상 16의 배수로 해 두면 8바이트의 double이나 16바이트의 long double 등을 스택에 두어도 정렬이 유지됩니다. 그래서 함수는 프레임 크기를 16의 배수로 확보하며, 저장할 레지스터가 하나뿐이어도 'addi sp, sp, -16'으로 합니다.