그림 5-2는 스택 프레임을 test() 함수를 호출한 main() 함수까지 확장한 모습입니다.
그림 5-2 main() 함수의 스택 프레임(call by value)
스택 프레임은 스택 메모리 공간에 생기는데 이 공간 역시 스택 자료 구조의 작동 원리를 따릅니다(9장 4절에서 자세히 다룹니다). main() 함수가 먼저 실행되므로 스택 프레임이 먼저 쌓이고 main() 함수 안에서 호출한 test() 함수의 스택 프레임은 그 위에 쌓입니다. test() 함수가 모두 실행되면 test() 함수의 스택 프레임이 먼저 사라지고 이후에 프로그램이 종료되면 main() 함수의 스택 프레임이 사라집니다.
지금부터 이번 절에서 가장 중요한 이야기를 하겠습니다. 그림 5-2를 보면 main() 함수의 스택 프레임 공간에도 a와 b가 있고 test() 함수의 스택 프레임 공간에도 a와 b가 있습니다. 이 공간은 서로 독립된 공간입니다. 코드 5-7의 #5에서 인자를 전달할 때 main() 함수 스택 프레임의 지역 변수인 a와 b를 전달한 것 같지만, 실제로는 test() 함수 스택 프레임의 지역 변수 a와 b에 값만 ‘복사’한 것입니다. 이처럼 인자를 전달할 때 값을 복사해 전달하는 경우를 값에 의한 전달(call by value)이라고 합니다. 말 그대로 값을 복사할 뿐입니다.