@frameAddress
@frameAddress
도입
@frameAddress는 현재 스택 프레임(stack frame)의 베이스 포인터(base pointer) 를 돌려주는 내장 함수예요. 함수가 호출되면 그 함수의 지역 변수와 실행 정보가 스택에 쌓이는데, 그 기록이 시작되는 위치의 주소를 얻을 수 있죠. 저수준 디버깅이나 스택을 직접 다뤄야 할 때 유용해요.
본문
@frameAddress() usize
이 함수는 현재 스택 프레임의 베이스 포인터를 반환해요. 쉽게 말하면 "지금 실행 중인 함수의 스택 프레임이 어디서 시작하는가"를 알려주는 주소라고 보면 돼요.
그런데 여기서 한 가지 꼭 알아둬야 할 점이 있어요. 이 함수의 동작은 타깃(target)에 따라 달라서, 모든 플랫폼에서 똑같은 결과를 보장하지 않아요. 게다가 릴리스 모드(release mode)에서는 컴파일러가 공격적으로 최적화(aggressive optimization)하기 때문에 프레임 주소를 아예 얻을 수 없는 경우도 있어요. 즉, 디버그 빌드에서나 의미 있게 동작할 수 있다는 점을 염두에 두셔야 해요.
그리고 이 함수는 함수 스코프(function scope) 안에서만 유효해요. 함수 밖, 예를 들어 전역 스코프 같은 곳에서는 호출할 수 없어요.
더 알아보기(Learn more)
@frameAddress는 현재 스택 프레임의 시작 주소, 즉 베이스 포인터를 돌려줘요.- 반환되는 값이 실제로 무엇을 가리키는지는 타깃 플랫폼마다 다를 수 있고, 릴리스 모드에서는 최적화 때문에 프레임 주소가 없을 수도 있어요.
- 이 함수는 함수 스코프 안에서만 쓸 수 있다는 제약이 있어요.